728x90

추가 내용입니다.

 

앱 상단 상태바 ( Status Bar ) 를 없애면 아래 방법은 적용이 안됩니다.

상태바를 없애지 않아야 아래의 방법으로 키보드가 올라올시 뷰가 같이 키보드의 영역만큼 위로 올라갑니다.

 

다른 방법이 있다면 댓글로 알려주세요~!!

 

광고클릭은 포스팅 작성에 큰 힘이 됩니다!

 

 

1. AndroidManifest.xml파일에서 

android:windowSoftInputMode="adjustResize" 속성을 부여한다.

 

2. activity_main.xml 액티비티 레이아웃에서 ConstraintLayout 으로 설정하고 키보드로 보이지 않는 뷰를 하단으로 이어준다.

app:layout_constraintEnd_toEndOf="parent" )

 

 

스크린샷 참조

 

1. Manifest파일에서 해당 액티비티에 속성을 부여한다.

 

2. Constraint 밑에 뷰들을 배치시킨다.

 

Constraint를 하단으로 맞춰준다

 

 

 

<적용된 모습>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

windowSoftInputMode  속성 모음

 

 1. 설정 X : adjustUnspecified 와 stateUnspecified 가 적용 된다.

 

 2. adjustPan : 키보드가 올라오면 EditText에 맞춰 화면 UI가 실종 됩니다. (위 아래로 잘림)

 

 3. adjustResize : 키보드가 올라와도 EditText와 UI가 화면에 보이도록 Activity를 resize 한다.

 

 4. adjustUnspecified : 시스템이 알아서 상황에 맞는 옵션을 설정 한다. 키보드 조정에 대한 디폴트 값이다.

 

 5. stateHidden : Acitivty 실행 시 키보드가 자동으로 올라오는 것을 방지 한다.

 

 6. stateAlwaysHidden : Acitivty 실행 시 항상 키보드가 자동으로 올라오는 것을 방지 한다. (액티비티 이동 포함)

 

 7. stateVisible : Acitivty 실행 시 키보드가 자동으로 올라 온다. (EditText에 포커스 맞춰짐)

 

 8. stateAlwaysVisible : Acitivty 실행 시 항상 키보드가 자동으로 올라 온다. (EditText에 포커스 맞춰짐) (액티비티 이동 포함)

 

 9. stateUnchanged : 키보드를 마지막 설정 상태로 유지 한다.

 

 10. stateUnspecified : 키보드의 상태가 설정이 안된 상태이다. 시스템이 적절한 키보드를 상태를 설정해 주거나 테마에 따라 설정 해준다. 키보드 상태의 디폴트 값이다. 

728x90

NullPointerException 이하 NPE의 주된 원인중 하나는

xml의 뷰 객체 id값과 java 코드에서 매칭이 어긋난 경우다.


캡쳐로 모든 설명을 대신한다.









방지법 -> 


모든 액티비티 뷰의 네이밍 규칙을 통합한다.


ex) btnLogin, etID, tvWelcomeMsg


액티비티안에서 id name이 중복되지 않는다면, 다른 액티비티에서 같은 id name이 사용되더라도 상관없다. ( 실제 메모리 주소값이 다름 )


728x90

issue

 -> textarea를 클릭하면 커서(캐럿)의 시작위치가 클릭한 곳에 위치함.



원인

-> 아래 그림처럼

 <textarea>

</textarea> 사이에 공백이 존재함



해결방법 

 <textarea></textarea> 로 공백을 없애주었음.





적용 후 커서(캐럿)이 정상적으로 좌측끝으로 위치함.



728x90

apr-1.6.5 설치 오류 - 1

configure: error: in `/home/bongho/apr-1.6.5':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details


-> 해결방안

의존성 파일 설치

apt-get install gcc


apr-1.6.5 설치 오류 - 2

rm: cannot remove 'libtoolT': No such file or directory


-> 해결방안

cp libtool libtoolT


*make 명령이 없습니다


-> 해결방안

apt-get install make


make && make install


apr-util-1.6.1 설치 오류 - 1

xml/apr_xml.c:35:10: fatal error: expat.h: 그런 파일이나 디렉터리가 없습니다


->해결방안

sudo apt-get install libexpat1-dev


-> 설치

sudo ./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr


make && make install



pcre-8.39 설치 오류 - 1

configure: error: You need a C++ compiler for C++ support.


->해결방안

apt-get install g++


pcre.8.39 설치 오류 - 2

'aclocal-1.15' is missing on your system.


->해결방안

apt-get install automake



sudo ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-mods-shared=most --enable-module=so --enable-rewrite

728x90

헝가리안 표기법


나무위키 : 헝가리안 표기법 링크



협업은 프로그래밍에 필수요소로 자리잡았다.

협업을 할 때 내가 타인의 코드를 보거나

타인이 나의 코드를 볼 때

코딩 스타일에 규약을 갖고 있어야 가독성이 늘어날 것이다.


exam ) mList


m은 지역 변수인지 클래스 변수인지를 구분하는 역할을 한다.





IDE의 발전으로 몰락의 길을 걷고있다.


디스플레이 화면이 커지면서 한 눈에 볼 수 있는 코드의 양이 많아지고, IDE가 눈부시게 발전하면서 마우스 커서만 올리면 해당 변수의 데이터 타입이 뙇!하고 나오는 덕에 헝가리안 표기법은 바로 구식으로 변하고 말았다. 단, IDE를 써먹을 수 없는 환경에서 일하는 사람들은 이거 안쓰면 대략 망하므로, 명맥은 유지하고 있다...는데 이쪽도 싫어하는 사람 많다(...) 심지어 완전한 동적 타입언어인 Python에서도 헝가리안 표기법 없이 잘만 코딩하는 사람이 많다는게 불필요성을 증명한다 대신 C++에서 클래스 멤버 변수인 경우에 이름 뒤에 _를 붙이는 정도로 간소화 해서 쓰는 경우는 있다.

데이터의 논리적인 상태를 나타내는 Apps Notation은 지금도 간간히 쓰이고 있다.



728x90

import java.lang.System;
import java.util.Random;
import java.util.Scanner;

public class MainApp {
	

	private Scanner scanner;


	public static void main(String[] args) {
	MainApp my1 = new MainApp();
	my1.userCmd();		
	}
	
	public void userCmd() {
		MainApp my1 = new MainApp();
		scanner = new Scanner(System.in);		
		System.out.println("강화 하시려면 1을 입력하세요.");
		int userInput = scanner .nextInt();				
		if(userInput == 1) my1.get_enchan();
		else{
			System.out.println("강화를 취소합니다.");			
		}		
	}	
	
		
		public void get_enchan() {
			MainApp my1 = new MainApp();
			Random random = new Random();			
			System.out.println("강화를 시작합니다.");
			Boolean [] enchant = new Boolean[3];  
			for(int i=0; i<enchant.length; i++) { 
				enchant[i] = random.nextBoolean();
				
				if(enchant[i]) {
					System.out.println("★★★★★★★★★★");				
				}
				else System.out.println("○○○○○○○○○○○○");
			}

			if(enchant[0]) {
				if(enchant[1]) {
					if(enchant[2]) {
						System.out.println("인챈트를 성공하였습니다.");
					}	else {
						System.out.println("인챈트가 실패하였습니다."); my1.userCmd();
					}
				}	else {
					System.out.println("인챈트가 실패하였습니다."); my1.userCmd();
				}
			}			
			else if(enchant[0] == false) {
				if(enchant[1] == false) {
					if(enchant[2] == false) {
						System.out.println("인챈트를 성공하였습니다.");
					}	else {
						System.out.println("인챈트가 실패하였습니다."); my1.userCmd();
					}
				}	else {
					System.out.println("인챈트가 실패하였습니다."); my1.userCmd();
				}
				
			}	else {
				System.out.println("인챈트가 실패하였습니다."); my1.userCmd();
				
			}
		}
}	




+ Recent posts