System.out.println("Hello, World");



키보드를 제어하려면 InputMethodManager 객체를 사용한다. 이 객체는 getSystemService 메서드로 구할 수 있으며 다음 메서드로 키보드를 보이거나 숨긴다.


mImm.showSoftInput(View view, int flags);

mImm.hideSoftInputFromWindow(IBinder windowToken, int flags [,ResultReceiver resultReceiver]);


위와 같이 Show버튼을 누르면 키보드가 등장하고, Hide버튼을 누르면 키보드가 사라진다.



Posted by 김마농

코드에서 inputType 속성을 변경할때는 setInputType이나 setRawInputType 메서드를 호출하는데 인수로 세속성의 조합을 전달한다. 인수의 타입은 정수 하나이지만 속성 조합이 까다로우므로 실행 중에 변경하는 것은 쉽지 않으며 XML 문서의 inputType 속성으로 지정하는 것이 훨씬 쉽다. 


 inputType

설명 

none 

편집할 수 없는 문자열 

text 

단순 문자열 

texttimeMultiLine 

여러 줄 입력 가능한 문자열 

textEmailAddress 

email 주소 

textPassword 

비밀번호 

number 

숫자 

numberSigned 

숫자와 부호 

numberDecimal 

숫자와 부호와 소수점 

phone 

전화번호 

datetime 

날짜와 시간 


각 에디트박스를 선택하면 아래쪽에 소프트 키보드가 나타나는데 입력타입에 따라 키보드의 모양이 완전히 달라진다.





Posted by 김마농



case R.id.home은 Edit박스의 첫번째로 이동한다.


case R.id.end는 Edit박스의 마지막으로 이동한다.


case R.id.selblock은 지정한 위치의 3번째와 10번째를 블록 지정한다.


case R.id.selall은 Edit박스를 모두 블록지정한다.


case R.id.getSel은 임의로 지정한 블록을 Toast로 몇번째와 몇번째가 블록지정했는지 알려준다.



Posted by 김마농



길이를 제한하는 정석적인 방법은 입력 필터를 사용하는 것이다.


void setFilters(InputFilter[] filters)


이 메서드로 에디트의 입력을 제한하는 필터 객체를 지정하는데 필터의 배열을 전달할 수 있으므로 대문자만 받는다던가, 길이를 제한하는 필터를 한꺼번에 지정할 수 있다.


위와 같은 코드에서는 3글자만 받도록 제한하였다.



Posted by 김마농



XML에 등록해둔 won, price, won2, price2를 받아서 


TextWatcher에 들어 있는 float price = (float)won/gram;


여기서 계산해준후 

mPrice.setText(String.format("그램당 %.4f원",price));로 가격을 계속 바꿀때마다 변경하도록 한다. 





Posted by 김마농



텍스트가 변경되는 것도 일종의 이벤트이며 편집될때마다 어떤 작업을 할 필요가 있을때 이 이벤트에 반응하면 된다. 편집 이벤트를 처리하는 TextWatcher 객체를 생성한 후 리스너로 등록해 놓으면 사용자가 문자열을 편집할 때마다 TextWatcher 인터페이스의 메서드가 호출된다.

 

public void afterTextChanged(Editable s) {}

public void beforeTextChanged(CharSequence s, int start, int count,int after) { }

public void onTextChanged(CharSequence s, int start, int before,int count) {


이 이벤트들은 변경 사실을 알리기만 할 뿐이므로 리스너 내에서 문자열을 수정해서는 안된다. afterTextChanged에서 문자열 s를 변경 할 수 있지만 잘못하면 무한 루프에 빠질 위험이 있으므로 주의해야 한다. 



Posted by 김마농




editText창과 버튼 5개를 각각 만들어준다. OnClickListener대신 onClick="mOnClick"을 이용한다.


INS 버튼은 INS를 삽입하고, DEL버튼은 2번째부터 5번까지 삭제한다. 


APP 버튼도 INS처럼 문자를 삽입한다. REP은 2번째부터 5번까지의 텍스트를 REP로 교체한다. 


CLEAR버튼은 모든 텍스트들을 초기화 시킨다. 









Posted by 김마농


TextView의 디폴트 버퍼 타입은 normal이므로 스팬을 배치할려면 buffertype 속성을 spannable로 지정해야 한다. EditText의 디폴트 버퍼 타입은 편집을 지원하는 editable이므로 별 지정이 없어도 스팬을 배치할 수 있다.


위와 같이 XML을 설정해준다.



실행하게 되면 위와 같은 화면처럼 출력된다. 

이제 이것들을 bufferType을 이용하여 다 잘라낼것이다.




위 코딩 내용중 1~7까지는 기울임, 8 ~ 11까지는 빨간색 배경, 12 ~17까지는 밑줄 속성을 부여한다.


에디트 스팬에는 다양한 플래그를 지정하였다. 플래그는 SPAN_앞쪽확장여부_뒤쪽확장여부 식으로 되어 있는데 스팬의 경계 부분에 새 문자가 입력 될때 스팬의 확장 여부를 제정한다. 

EXCLUSIVE이면 확장되지 않고 INCLUSIVE이면 확장된다. 


espan.setSpan(new StyleSpan(Typeface.ITALIC), 1, 7,

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


ITALIC체는 둘다 제외이므로 앞뒤로 새 문자를 삽입해도 기울임 속성이 적용되지 않는다. 


espan.setSpan(new BackgroundColorSpan(0xffff0000), 8, 11,

Spannable.SPAN_INCLUSIVE_INCLUSIVE);


RED는 둘다 포함이므로 앞뒤로 새 문자를 삽입할때 빨간색으로 삽입된다. 


espan.setSpan(new UnderlineSpan(), 12, 17,

Spannable.SPAN_EXCLUSIVE_INCLUSIVE);


UnderLine은  앞은 미포함이고 뒤에는 포함이므로 뒤에는 밑줄이 적용된다.



BufferType

 buffertype 속성

설명 

 NORMAL

normal 

단순한 문자열이며 읽기 전용이다. 

SPANNABLE 

spannable 

문자열에 부가 정보를 같이 기록한다. 

EDITABLE 

editable 

편집 가능한 문자열이다. 


setSpan 메서드는 문자열의 start와 end 오프셋 사이에 스팬 정보를 설정한다. 설정 대상 정보의 종류가 워낙 많고 사용자가 정의할 수 도 있기 때문에 서식 인수는 Object 타입으로 받는다. 



Posted by 김마농



200자 정도되는 소스코드. 


Posted by 김마농




일단 각각 버튼들에게 컨텍스트메뉴를 등록한다고 정의해준다. 


사용자가 위젯들을 롱 클릭하면 onCreateContextMenu 메서드가 호출되며 두 번째 인수로 롱클릭한 뷰가 전달된다. 


커스텀뷰는 onCreateContextMenu를 재정의하여 컨텍스트 메뉴를 직접 생성하며 MyImage는 자신의 메서드에서 이미지 회전, 크기 변경 등 이미지 관리에 대한 메뉴항목을 추가한다. 컨텍스트 메뉴는 직접 생성하더라도 선택시의 동작은 직접 처리할 수 없으며 액티비티의 onContextItemSelected 메서드에서 한꺼번에 수행하여야 한다.






Posted by 김마농