수색…


EditTexts로 작업하기

EditText는 Android 앱의 표준 텍스트 입력 위젯입니다. 사용자가 텍스트를 앱에 입력해야하는 경우이를 수행하는 주된 방법입니다.

EditText

EditText의 동작을 사용자 정의하기 위해 설정할 수있는 많은 중요한 속성이 있습니다. 이들 중 몇 가지는 다음과 같습니다. 더 많은 입력 필드에 대한 자세한 내용은 공식 텍스트 필드 가이드를 확인하십시오.

용법

EditText는 다음 XML을 사용하여 모든 기본 비헤이비어가있는 레이아웃에 추가됩니다.

<EditText
    android:id="@+id/et_simple"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
</EditText>

EditText는 단순히 TextView의 얇은 확장이며 모든 동일한 속성을 상속합니다.

값 검색

EditText에 입력 된 텍스트의 값을 얻는 방법은 다음과 같습니다.

EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();

추가 엔트리 사용자 정의

엔트리를 한 줄짜리 텍스트로 제한하고 싶을 수 있습니다 (개행을 피하십시오) :

<EditText
  android:singleLine="true"
  android:lines="1"
/>

digits 속성을 사용하여 필드에 입력 할 수있는 문자를 제한 할 수 있습니다.

<EditText
  android:inputType="number"
  android:digits="01"
/>

이렇게하면 입력 된 숫자가 "0"과 "1"로 제한됩니다. 총 문자 수를 다음과 같이 제한하려고 할 수 있습니다.

<EditText
  android:maxLength="5"
/>

이러한 속성을 사용하여 텍스트 필드의 예상 입력 동작을 정의 할 수 있습니다.

색상 조정

android:textColorHighlight 속성을 사용하여 EditText 내에서 선택한 텍스트의 강조 배경색을 조정할 수 있습니다.

<EditText
    android:textColorHighlight="#7cff88"
/>

자리 표시 자 힌트 표시

EditText 컨트롤에 대한 힌트를 설정하여 사용자에게 다음을 사용하여 특정 입력을 요구할 수 있습니다.

<EditText
    ...
    android:hint="@string/my_hint">
</EditText>

힌트

밑줄 선 색상 변경하기

AppCompat 라이브러리를 사용한다고 가정하면 colorControlNormal, colorControlActivated 및 colorControlHighlight 스타일을 재정의 할 수 있습니다.

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#d32f2f</item>
    <item name="colorControlActivated">#ff5722</item>
    <item name="colorControlHighlight">#f44336</item>
</style>

DialogFragment 내에 이러한 스타일이 적용되지 않으면 onCreateView () 메서드에 전달 된 LayoutInflater를 사용할 때 알려진 버그가 있습니다.

이 문제는 AppCompat v23 라이브러리에서 이미 수정되었습니다. 업그레이드 방법에 대해서는이 안내서를 참조하십시오. 또 다른 일시적인 해결 방법은 onCreateView () 메서드에 전달 된 것 대신 Activity의 레이아웃 인플레이터를 사용하는 것입니다.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
  }

EditText 입력 듣기

EditText에 대한 변경 사항을 듣고 그러한 변경 사항이 발생할 때 작업을 수행하는 방법을 보려면 기본 이벤트 리스너 클리프를 확인하십시오.

플로팅 레이블 피드백 표시

전통적으로 EditText는 사용자가 타이핑을 시작한 후 (위에서 설명한) 힌트 메시지를 숨 깁니다. 또한 모든 유효성 검사 오류 메시지는 개발자가 수동으로 관리해야했습니다.

TextInputLayout 을 사용하면 힌트와 오류 메시지를 표시하는 부동 레이블을 설정할 수 있습니다. 여기에서 자세한 내용을 확인할 수 있습니다.

InputType 사용자 정의

텍스트 필드는 숫자, 날짜, 암호 또는 전자 메일 주소와 같은 다양한 입력 유형을 가질 수 있습니다. 유형에 따라 필드 내부에서 허용되는 문자의 종류가 결정되고 가상 키보드가 자주 사용하는 문자의 레이아웃을 최적화하도록 메시지를 표시 할 수 있습니다.

기본적으로 EditText 컨트롤 내의 텍스트 내용은 일반 텍스트로 표시됩니다. inputType 속성을 설정하면 전화 번호 및 비밀번호와 같은 다양한 유형의 정보를 쉽게 입력 할 수 있습니다.

<EditText
    ...
    android:inputType="phone">
</EditText>

가장 일반적인 입력 유형은 다음과 같습니다.

유형 기술
텍스트 URI URI로 사용될 텍스트
textEmailAddress 전자 메일 주소로 사용될 텍스트
textPersonName 사람의 이름 인 텍스트
textPassword 가려져 야 할 암호 인 텍스트
번호 숫자 전용 필드
전화 전화 번호 입력
날짜 날짜 입력
시각 시간을 입력하십시오.
textMultiLine 필드에 여러 줄의 텍스트 허용

또한 android:inputType 을 사용하면 모든 새 단어를 대문자로 사용할지 또는 자동 완성 및 맞춤법 추천과 같은 기능을 사용할 지와 같은 특정 키보드 동작을 지정할 수 있습니다.
키보드 비헤이비어를 정의하는 일반적인 입력 유형 값은 다음과 같습니다.

유형 기술
textCapSentences 새 문장마다 첫 글자를 대문자로 사용하는 일반 텍스트 키보드
textCapWords 모든 단어를 대문자로 표시하는 일반 텍스트 키보드입니다. 제목이나 사람 이름에 좋습니다.
textAutoCorrect 일반적으로 맞춤법이 틀린 단어를 수정하는 일반 텍스트 키보드

필요한 경우 여러 inputType 속성을 설정할 수 있습니다 ( '|'로 구분).
예:

<EditText
    android:id="@+id/postal_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/postal_address_hint"
    android:inputType="textPostalAddress|
                       textCapWords|
                       textNoSuggestions" />

사용 가능한 모든 입력 유형의 목록을 여기에서 볼 수 있습니다 .

`inputype` 속성

EditText 위젯의 inputype 속성 : (Android 4.4.3 및 2.3.3에서 테스트 됨)

<EditText android:id="@+id/et_test" android:inputType="?????"/>

textLongMessage = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 사례 : 소문자. 제안 : 예. 더하다. chars : ,. 모든 것

textFilter = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 사례 : 소문자. 제안 : 아니요 . 더하다. chars : ,. 모든 것

textCapWords = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 케이스 : 카멜 케이스 . 제안 : 예. 더하다. chars : ,. 모든 것

textCapSentences = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 경우 : 문장 . 제안 : 예. 더하다. chars : ,. 모든 것

시간 = 키보드 : 숫자. Enter 버튼 : 보내기 / 다음. 감정 : 안돼. 사례 : -. 제안 : 아니요 . 더하다. chars : :

textMultiLine = 키보드 : 알파벳 / 기본값. Enter 버튼 : 다음 줄 . 감정 : 예. 사례 : 소문자. 제안 : 예. 더하다. chars : ,. 모든 것

숫자 = 키보드 : 숫자 . Enter 버튼 : 보내기 / 다음. 감정 : 안돼. 사례 : -. 제안 : 아니요. 더하다. 문자 : 아무것도

textEmailAddress = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 안돼 . 사례 : 소문자. 제안 : 아니요 . 더하다. chars : @. 모든 것

(유형 없음) = 키보드 : 알파벳 / 기본값. Enter 버튼 : 다음 줄 . 감정 : 예. 사례 : 소문자. 제안 : 예. 더하다. chars : ,. 모든 것

textPassword = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 안돼. 사례 : 소문자. 제안 : 아니요 . 더하다. chars : ,. 모든 것

텍스트 = 키보드 : 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 사례 : 소문자. 제안 : 예. 더하다. chars : ,. 모든 것

textShortMessage = 키보드 : 알파벳 / 기본값. Enter 버튼 : 감정 . 감정 : 예. 사례 : 소문자. 제안 : 예. 더하다. chars : ,. 모든 것

textUri = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 안돼. 사례 : 소문자. 제안 : 아니요 . 더하다. chars : /. 모든 것

textCapCharacters = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 대소 문자 : 대문자 . 제안 : 예. 더하다. chars : ,. 모든 것

phone = 키보드 : 숫자 . Enter 버튼 : 보내기 / 다음. 감정 : 안돼. 사례 : -. 제안 : 아니요 . 더하다. chars : *** #. - / (+) WPN, + **

textPersonName = 키보드 : 알파벳 / 기본값. Enter 버튼 : 보내기 / 다음. 감정 : 예. 사례 : 소문자. 제안 : 예. 더하다. chars : ,. 모든 것


참고 : Auto-capitalization 설정은 기본 동작을 변경합니다.

참고 2 : Numeric keyboard 에서 모든 숫자는 영어 1234567890입니다.

참고 3 : Correction/Suggestion 설정은 기본 동작을 변경합니다.

SoftKeyboard 숨기기

Softkeyboard 숨기기는 일반적으로 EditText로 작업 할 때 기본 요구 사항 입니다. 소프트 키 보드는 기본적으로 뒤로 버튼을 눌러 닫을 수 있으므로 대부분의 개발자는 InputMethodManager 를 사용하여 hideSoftInputFromWindow를 호출하는 가상 키보드를 숨기고 Android에 포커스가있는보기가 포함 된 토큰을 전달하도록 Android를 강제합니다. 다음 작업을 수행하는 코드입니다.

public void hideSoftKeyboard()    
{
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);    
}

코드가 직접적이지만 또 다른 주요한 문제는 숨김 함수가 어떤 이벤트가 발생할 때 호출되어야한다는 것입니다. EditText가 아닌 다른 곳을 누를 때 숨겨진 Softkeyboard가 필요할 때 어떻게해야합니까? 다음 코드는 onCreate () 메서드에서 한 번만 호출해야하는 깔끔한 함수를 제공합니다.

public void setupUI(View view) 
{
        String s = "inside";
        //Set up touch listener for non-text box views to hide keyboard.
        if (!(view instanceof EditText)) {

            view.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard();
                    return false;
                }

            });
        }

        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {

            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

                View innerView = ((ViewGroup) view).getChildAt(i);

                setupUI(innerView);
            }
        }    
}

사용자 정의 텍스트 및 해당 동작 내에서 아이콘 또는 단추를 클릭하고 리스너를 클릭하십시오.

이 예제는 오른쪽에있는 아이콘으로 텍스트 편집을하는 데 도움이됩니다.

참고 :이 그냥있는 setCompoundDrawablesWithIntrinsicBounds 사용하고 있습니다. 그래서 아이콘 위치를 변경하려면 setIcon있는 setCompoundDrawablesWithIntrinsicBounds 사용하여 달성 할 수 있습니다.

public class MKEditText extends AppCompatEditText {

    public interface IconClickListener {
        public void onClick();
    }

    private IconClickListener mIconClickListener;

    private static final String TAG = MKEditText.class.getSimpleName();

    private final int EXTRA_TOUCH_AREA = 50;
    private Drawable mDrawable;
    private boolean touchDown;

    public MKEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MKEditText(Context context) {
        super(context);
    }

    public MKEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void showRightIcon() {
        mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);

        setIcon();
    }

    public void setIconClickListener(IconClickListener iconClickListener) {
        mIconClickListener = iconClickListener;
    }

    private void setIcon() {
        Drawable[] drawables = getCompoundDrawables();

        setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);

        setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        setSelection(getText().length());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int right = getRight();
        final int drawableSize = getCompoundPaddingRight();
        final int x = (int) event.getX();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
                    touchDown = true;
                    return true;
                }
                break;
            case MotionEvent.ACTION_UP:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
                    touchDown = false;
                    if (mIconClickListener != null) {
                        mIconClickListener.onClick();
                    }
                    return true;
                }
                touchDown = false;
                break;

        }
        return super.onTouchEvent(event);
    }
}

터치 영역을 변경하려면 EXTRA_TOUCH_AREA 기본값을 50으로 변경하면됩니다.

버튼과 클릭 리스너를 활성화하기 위해 당신의 Activity 나 Fragment에서 이것을 호출 할 수 있습니다.

MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
            @Override
            public void onClick() {
              // You can do action here for the icon.
               
            }
        });


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow