EditText(에디트텍스트) 속성 모든것(1)

Posted by ITPangPang
2016. 5. 28. 16:12 안드로이드(android)/위젯(Widget)


EditText(에디트텍스트)

속성의 모든 것(1)


ㆍ이번에는 가장 많이 사용하는 위젯 중 하나인 EditText에 

   대해 써보려고 합니다.


   맨 처음 타이틀 적을때는 속성을 빼고 EditText의 모든것!

   이라고 했다가.. 

   

   모든 것이라고 하면 (이건 나중에 관련글을 따로 쓸 거 같지만)

   왠지 windowSoftInputMode에 관한것도 전부 써야할 느낌이라.

   (이건 나중에 키보드 올라올때 UI변경관련 등의 내용입니다)

   그냥 속성이라는 말을 붙였습니다. 



EditText란?


EditText는 우리말로 변환하면

입력상자정도가 어울릴 것 같습니다


사용자가 어떤 정보의 입력이 필요할때

그 공간을 만들어주는 위젯입니다.


EditText는 게임앱을 제외하면

거의 모든 앱에서 들어가는 위젯입니다.


게임앱이라고 말한 이유는

뭐 랭킹등록 이런걸 제외하면

거의 쓰이지 않고

쓰인다 해도 게임앱은 거의

게임툴로 개발하기 때문에

제외라고 적었습니다.


EditText는 아주 사용하기

쉽기 때문에 이런내용은

대충 넘어가고 바로

속성을 하나씩 넣어가면서

써보도록 하겠습니다



EditText 생성


<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>


다른 위젯과 마찬가지로

기본 width, height만

적어주면 생성이 됩니다.


현재 width가 wrap_content로

한글자도 없기 때문에

아래 그림처럼

아주 작은 공간을 차지합니다



hint



hint는 사용자가

EditText의 넣어야 하는

입력내용을 미리 알려주는

속성입니다.



[xml]

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이름을 입력하세요"
/>



[java]

EditText et = (EditText) findViewById(R.id.et);
et.setHint("이름을 입력하세요");



textColorHint



textColorHint는

위에서 사용한 hint의

색깔입니다.

위 사진은 극단적으로

빨간색을 넣어봤습니다.


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이름을 입력하세요"
android:textColorHint="#ff0000"
/>


[java]

et = (EditText) findViewById(R.id.et);
et.setHint("이름을 입력하세요");
et.setHintTextColor(Color.parseColor("#ff0000"));




maxLength



maxLength는 최대입력가능한

길이입니다. 

위 사진은 "10"으로 설정한 상태여서

딱 10글자가 들어간 상태입니다


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이름을 입력하세요"
android:maxLength="10"
/>


[java]

EditText et = (EditText) findViewById(R.id.et);
InputFilter[] EditFilter = new InputFilter[1];
EditFilter[0] = new InputFilter.LengthFilter(10);
et.setFilters(EditFilter);



background



아래 밑줄을 없애는 방법이다(@null)


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이름을 입력하세요"
android:background="@null"
/>


[java]

EditText et = (EditText) findViewById(R.id.et);
et.setBackground(null);



focusable




앱이 실행되었을때

처음 포커스 주는곳을

설정 할 수 있다.


기본 디폴트라면

앱이 실행될 때

이름을 입력하세요에

포커스가 갈 것이다.


위 사진같이 하기 위해서는


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이름을 입력하세요"
android:focusable="false"
/>

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="나이를 입력하세요"
android:focusable="true"/>


[java]

EditText et = (EditText) findViewById(R.id.et);
et.setFocusable(false);

EditText et2 = (EditText) findViewById(R.id.et2);
et2.setFocusable(true);


이게 정석이고


간편하게 et에만

false를 넣고 et2에는

아무것도 안적어도

et2에 포커스가 가게 된다



위와 같이 아에 포커스를

안주려면

et, et2 둘 다 false를 넣어주면

된다.



inputType


숫자 타입



inputType은

사용자가 입력을 위해

EditText를 선택했을때

키보드에 type을

강제적으로 부여하여

필요한 type만 입력가능하게

할 수 있습니다


나이를 입력하는 

EditText에서는

숫자만 필요합니다


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="나이를 입력하세요"
android:inputType="number"
/>


[java]

EditText et = (EditText) findViewById(R.id.et);
et.setInputType(InputType.TYPE_CLASS_NUMBER);



비밀번호 타입


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="비밀번호를 입력하세요"
android:inputType="textPassword"
/>


[java]

EditText et = (EditText) findViewById(R.id.et);
et.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
et.setTransformationMethod(PasswordTransformationMethod.getInstance());



E-mail 타입


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이메일을 입력하세요"
android:inputType="textEmailAddress"
/>


[java]

EditText et = (EditText) findViewById(R.id.et);
et.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);


Type을 전부

설명하기에는

그 부분만 따로

글을 써야 될정도이므로

자주쓰이는

몇개만 적었습니다


cursorVisible



cursorVisible은

커서 깜빡깜빡 거리는거

그걸 보여주냐 마느냐 입니다

기본은 true입니다

만약 보기 싫다면

false로 바꿔주면 됩니다.


[xml]

<EditText
android:id="@+id/et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="이메일을 입력하세요"
android:cursorVisible="false"
/>



[java]

EditText et = (EditText) findViewById(R.id.et);
et.setCursorVisible(false);



enable



enable은

말그대로 EditText의

사용여부인데


true,false로 제어가

가능합니다.


xml에서는 처음부터 false

넣을일이 거의 없을거라

생각합니다.


java코드에서만

거의 쓰는데

여기서도 상황,조건에 따라

코드가 다르므로

간단한

예를 하나 들어서 써보겠습니다.


조건)

EditText에 5글자가 들어오면

입력을 막아라

이런식으로 짜볼까요?

TextWatcher로 추가로 써보겠습니다


[java]

EditText et;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

et = (EditText) findViewById(R.id.et);
et.addTextChangedListener(etTextWatcher);
}

TextWatcher etTextWatcher = new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

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

}

@Override
public void afterTextChanged(Editable s)
{
if(s.length()==5)
{
et.setEnabled(false);
}
}
};


여기까지가 기본적으로

많이 사용하는 속성들입니다.

SingLine 같은 기본속성들이 빠지긴 했는데

2편에서 넣어보도록 하겠습니다

2편에서는 java, xml말고 manifest에서도

설정가능한 부분. 아마 키보드관련해서

대부분 쓰게 될 것 같습니다.