EditText(입력 상자) 상세 설명


이 섹션 소개:

이전 섹션에서 첫 번째 UI 컨트롤TextView(텍스트 상자)에 대해 배웠습니다. 이 기사에서는 실제 개발에서 발생할 수 있는 많은 요구 사항을 제공합니다. 이 솔루션은 개발에 편의성을 제공해야 합니다. 이 섹션에서는 두 번째로 가장 일반적으로 사용되는 컨트롤EditText(입력 상자)을 알아봅니다. TextView와 매우 유사하지만 가장 큰 차이점은 EditText가 사용자 입력을 받아들일 수 있다는 것입니다! 이전과 마찬가지로 속성에 대해 하나씩 이야기하지 않겠습니다. 우리는 실용적인 응용 프로그램에 대해서만 이야기합니다. 속성을 공제하려면 API 문서를 직접 볼 수 있습니다. API 문서 그런 다음 이 섹션을 시작하세요!


1. 기본 프롬프트 텍스트

를 아래와 같이 설정하세요. 이 사용자 로그인 인터페이스에 익숙하시겠죠? 우리는 이 인터페이스를 여러 번 사용합니다.

1.png

다른 종류와 비교하면 다음과 같습니다. ?

2.png

물론 여기에 레이아웃을 게시하지는 않겠습니다. 여기서는 기본 프롬프트 텍스트의 두 가지 제어 속성만 소개합니다.

기본 프롬프트 텍스트의 두 가지 속성은 다음과 같습니다.

android:hint=" 기본 프롬프트 텍스트는 "
android:textColorHint="#95A1AA"

전자는 프롬프트의 텍스트 내용을 설정하고 후자는 프롬프트 텍스트의 색상을 설정합니다!


2. 포커스를 받은 후 구성 요소의 모든 텍스트 내용을 선택합니다.

입력 상자를 클릭하고 포커스를 받으면 커서를 텍스트의 시작이나 끝으로 이동하지 않습니다. 입력 상자에 모든 텍스트 내용을 가져옵니다! 이때 selectAllOnFocus 속성

android:selectAllOnFocus="true"

을 사용할 수 있습니다. 예를 들어 다음 렌더링은 다음과 같습니다. 첫 번째 항목에는 이 속성이 설정되어 있고 두 번째 항목에는 이 속성이 설정되어 있지 않습니다. EditText를 true로 설정하면 포커스가 설정됩니다. 모든 텍스트가 선택되었습니다!

3.gif


3. EditText 입력 유형 제한

때로는 입력 데이터를 제한해야 할 수도 있습니다. 예를 들어 전화번호를 입력할 때 문자열을 입력합니다. 분명히 이는 우리의 기대를 충족시키지 못하며, inputType 속성을 통해 입력 유형을 제한할 수 있습니다!

예를 들어 전화번호, 비밀번호(textPassword)만 제한할 수 있습니다.

<EditText
                                                                                 ' s

-- android:layout_height="wrap_content"
android:inputType="phone" />

선택적 매개변수는 다음과 같습니다:

텍스트 유형, 대부분 대문자, 소문자 및 숫자 기호

android:inputType="none"
android:inputType="text"
android:inputType="textCapCharacters"
android:inputType="textCapWords"
android:inputType="textCapSentences"
android:inputType="textAutoCorret"
android:inputType="textAutoComplete"
android:inputType="textMultiLine"
android:inputType="textImeMultiLine"
android : inputType="textNoSuggestions"
android:inputType="textUri"
android:inputType="textEmailAddress"
android:inputType="textEmailSubject"
android:inputType="textShortMessage"
android:inputType="textLongMessage"
android:inputType = "textPersonName"
android:inputType="textPostalAddress"
android:inputType="textPassword"
android:inputType="textVisiblePassword"
android:inputType="textWebEditText"
android:inputType="textFilter"
android:inputType=" textPhonetic "

numeric type

android:inputType="number"
android:inputType="numberSigned"
android:inputType="numberDecimal"
android:inputType="phone"//다이얼 키보드
android: inputType ="datetime"
android:inputType="date"//날짜 키보드
android:inputType="time"//시간 키보드

4. 최소 줄, 최대 줄, 단일 줄, 여러 줄, 자동 줄 바꿈 설정

EditText는 기본적으로 여러 줄을 표시하고 자동으로 줄 바꿈할 수 있습니다. 즉, 한 줄을 완전히 표시할 수 없는 경우 자동으로 줄 바꿈됩니다. 두 번째 줄

4.png

다음과 같이 제한할 수 있습니다.
최소 줄 수 설정: android:minLines="3"
또는 최대 EditText 줄 수 설정: android:maxLines="3"
PS: 입력 내용이 maxline을 초과하면 텍스트가 자동으로 위로 스크롤됩니다! !

또한 위의 로그인 인터페이스와 같이 스크롤 없이 한 줄 입력만 허용하도록 EditText를 제한해야 하는 경우가 많습니다. 예를 들어 줄 바꿈 없이 한 줄 입력을 달성하려면

android:singleLine="true"</p>
<p>
만 설정하면 됩니다</p>

<hr />

< ;h2>5. 텍스트 간격 및 영문 대문자 사용 유형</h2>

<p> 다음 두 가지 속성을 통해 단어 사이의 간격을 설정할 수 있습니다.
</p>
<pre>
android:textScaleX="1.5" //단어 사이의 가로 간격 설정
android:textScaleY="1.5" //단어 사이의 세로 간격 설정

또한 EditText는 영어 문자의 대문자 사용 유형을 설정하기 위한 속성도 제공합니다: android:capitalize기본값은 없음이며 세 가지 선택 값을 제공합니다:

  • 문장: 첫 글자만 대문자입니다

  • 단어: 각 단어의 첫 글자 크기, 공백을 사용하여 단어 구분

  • 문자: 모든 영어 문자는 대문자로 표시됩니다.


6. 내부 텍스트와 테두리 사이의 거리 거리

우리는 margin 관련 속성을 사용하여 android:marginTop = "5dp"와 같은 다른 컨트롤에 비해 구성 요소의 거리를 늘립니다. android:paddingTop = "5dp"

7과 같이 구성 요소의 텍스트와 구성 요소 테두리 사이의 거리를 늘리려면
padding

을 사용하세요. EditText를 설정하면 초점이 맞춰지고 작은 키보드가 표시됩니다

초점을 맞추고 작은 키보드를 표시하는 EditText 문제는 ​​최근 프로젝트에서 한동안 나를 괴롭혔습니다. 요구 사항은 다음과 같습니다. 활동에 들어간 후 EditText에 초점을 맞추고 동시에 사용자 입력을 위한 작은 키보드를 팝업으로 표시하십시오! 여러 가지 온라인 방법을 시도했지만 아무것도 작동하지 않습니다. 제가 사용하고 있는 5.1 시스템의 문제 때문인지는 모르겠습니다. 다음은 요약입니다.

먼저 EditText가 포커스를 얻고 포커스를 지웁니다

edit.requestFocus() //포커스를 가져오도록 요청합니다
edit.clearFocus(); //포커스 지우기

포커스를 얻은 후에는 작은 키보드가 팝업됩니다.

  • 낮은 버전 시스템에서는 작은 키보드가 자동으로 나타납니다. Focus를 직접 요청하면 팝업이 뜹니다.

  • 약간 높은 버전에서는 키보드를 수동으로 연주해야 합니다. 첫 번째:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

두 번째:

InputMethodManager imm = (InputMethodManager ) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //키보드를 강제로 숨깁니다.

이유는 모르겠지만 위의 두 가지 방법으로는 작은 키보드가 팝업되지 않더군요. 작성자는 작은 키보드가 팝업되는 문제를 해결하기 위해 마침내 windowSoftInputMode 속성을 사용했습니다. :

android:windowSoftInputModeActivity 메인 창과 소프트 키보드 간의 상호 작용 모드를 사용하면 Android 1.5 이후의 새로운 기능인 입력 방법 패널 가려짐 문제를 피할 수 있습니다.
이 속성은 다음 두 가지에 영향을 미칠 수 있습니다.
[1] 포커스가 생성될 때 소프트 키보드가 숨겨지거나 표시되는지 여부
[2] 소프트 키보드를 위한 공간을 확보하기 위해 활성 기본 창의 크기를 줄일지 여부

Simpler는 포커스가 있는 경우 키보드 제어 및 Act 창 크기 축소 여부, 숫자 키보드 배치에 사용됨
다음 값을 사용할 수 있으며, "|"로 구분하여 여러 값을 설정할 수 있음
stateUnspecified : 소프트 키보드의 상태가 지정되지 않았으며 시스템에서 적절한 상태 또는 테마에 따른 설정이 선택됩니다.
stateUnchanged: 이 활동이 나타나면 소프트 키보드는 숨겨진 여부에 관계없이 이전 활동의 상태를 유지합니다. 또는 표시됨
stateHidden: 사용자가 액티비티를 선택하면 소프트 키보드가 항상 숨겨집니다.
stateAlwaysHidden: 액티비티 메인 창이 포커스를 받으면 소프트 키보드가 항상 숨겨집니다.
stateVisible: 일반적으로 소프트 키보드가 표시됩니다.
stateAlwaysVisible: 사용자가 액티비티를 선택하면 소프트 키보드가 항상 표시됩니다.
adjustUnspecified: 기본 설정, 일반적으로 시스템이 액티비티를 숨길지 표시할지 결정합니다.
adjustResize: 액티비티는 항상 액티비티의 크기를 조정합니다. 소프트 키보드를 위한 공간을 남겨두기 위한 화면
adjustPan: 현재 창의 내용이 자동으로 이동하여 현재 초점이 키보드에 가려지지 않고 사용자가 항상 입력 내용의 일부를 볼 수 있습니다

우리는 할 수 있습니다 다음과 같이 작은 키보드를 표시해야 하는 활동에 대해 AndroidManifest.xml에 이 속성을 설정합니다.

5.png

그런 다음 EditText 개체에 requestFocus()를 입력하세요~


8.EditText 커서 위치 제어

때로는 지정된 위치로 이동하거나 일부 텍스트를 선택하기 위해 EditText에서 커서를 제어해야 할 수도 있습니다!
EditText는 setSelection() 메소드를 제공합니다. 이 메소드에는 두 가지 형식이 있습니다.

6.png
하나의 매개변수는 커서 위치를 설정하는 것이고, 두 개의 매개변수는 시작 위치와 끝 위치 사이의 중간 괄호를 설정하는 것입니다. , 즉, 부분적으로 선택되었습니다!
물론 setSelectAllOnFocus(true)를 호출하여 EditText에 포커스가 있을 때 모든 텍스트를 선택할 수도 있습니다!
또한 setCursorVisible(false);을 호출하여 커서가 표시되지 않도록 설정할 수도 있습니다.
getSelectionStart()getSelectionEnd를 호출하여 현재 커서의 전면 및 후면 위치를 얻을 수도 있습니다.


9. 이모티콘을 사용한 EditText의 간단한 구현

텍스트를 보낼 때 이모티콘과 함께 보낼 수 있는 두 가지 간단한 구현 방법이 있습니다.

1.
2. HTML 클래스를 사용하여 구현합니다. 여기서는 간단한 효과만 얻을 수 있습니다.
QQ와 유사하게 직접 작성할 수도 있습니다. 여러 표현을 선택할 수 있는 입력 상자가 있습니다!

렌더링을 살펴보세요(표현 추가를 완료하려면 클릭하여 표현식 추가):

7.png

코드도 매우 간단합니다.

and InstanceState);

        setContentView(R.layout.activity_main);
        btn_add = (버튼) findViewById(R.id.btn_add);
        edit_one = (EditText) findViewById(R.id.edit_one);
        btn_add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
               SpannableString spanStr = new SpannableString("imge");
               Drawable drawable = MainActivity.this.getResources().getDrawable(R.drawable.f045);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable. getIntrinsicHeight());
               ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
              spanStr.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                int 커서 = edit_one.getSelectionStart();
                edit_one.getText( ).insert(cursor, spanStr);
            }
        });
    }
}

PS: 그런데 사진을 넣는 것을 잊지 마세요~


10. 삭제 버튼이 있는 EditText

앱의 입력 인터페이스에서 자주 볼 수 있습니다.

8.png

콘텐츠를 입력하면 거기에 이렇게 작은 십자 아이콘이 나타나면 클릭하면 입력창의 내용이 지워집니다!
실제로 구현하는 것은 매우 간단합니다.
EditText에 대해 addTextChangedListener를 설정한 다음 입력 상자의 변경 사항을 모니터링하는 데 사용되는 TextWatcher()의 추상 메서드를 다시 작성한 다음 setCompoundDrawablesWithIntrinsicBounds를 사용하여 마지막으로 십자가 그림을 다시 작성합니다. onTouchEvent 메소드, 클릭 영역이 작은 십자가 그림의 위치인 경우 텍스트를 지웁니다!

구현 코드는 다음과 같습니다.

public 클래스 EditTextWithDel은 EditText를 확장합니다{

    private final static String TAG = "EditTextWithDel";
    private Drawable imgInable;
    private Drawable imgAble;
    private Context mContext;

    public EditTextWithDel(Context context) {
        super(context); ㅋㅋㅋ ;
        init();
    }

    공개 EditTextWithDel(Context Context, AttributeSet attrs, int defstyleattr) {super (context, attrs, defstyleattr);
mcontext = context;
init ();
}

private void init () {
in imgailable = mcontext.getResources (). R.drawable.delete_gray);
        addTextChangedListener(new TextWatcher() {
          @Override
           public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

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

           @Override
           public void afterTextChanged(Editable s) {
               setDrawable();
            }
       });
        setDrawable();
    }

    // 设置删除图pictures
    private void setDrawable() {
        if (length() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
           setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
    }

    // 处理删除事件
    @Override
    공용 부울 onTouchEvent(MotionEvent 이벤트) {
        if (imgInable != null && event.getAction() == MotionEvent. ACTION_UP) {
           int eventX = (int) event.getRawX();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; 이벤트Y = " + 이벤트Y );
            Rect Rect = new Rect();
            getGlobalVisibleRect(ect);
           Rect.left = Rect.right - 100;
            if (ect.contains(eventX, eventY))
                setText("");
        }
return super.onTouchEvent(event);
    }
    @Override
    protected void finalize() throwable {
        super.finalize();
    }
}

이 섹션 요약:

이 섹션에서는 Android UI 컨트롤의 EditText(입력 상자) 컨트롤을 소개합니다. 물론 위의 상황은 실제 개발에서는 확실히 충족되지 않습니다. 우리는 필요에 따라 그것을 사용해야 할 수도 있습니다. 물론 여기에는 사용자 정의 컨트롤에 대한 고급 주제가 포함됩니다. 고급 부분에서는 Android의 사용자 정의 컨트롤에 대해 자세히 설명하겠습니다! 이제 사용하시면 됩니다~