AutoCompleteTextView에 포커스를 둔 채 키보드를 숨기기

AutoCompleteTextView란?



키보드에 의한 인풋에 대해서, 자동으로 문자를 보완해 주는 기능을 갖추고 있던 EditText입니다.

일반적으로 Google의 머티리얼 디자인 가이드라인에 준거한 드롭다운 메뉴를 작성하는 경우는 다음과 같은 구현을 합니다.

res/layout/dropdown_menu.xml
<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/lyt_dropdown"
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="項目名1">

    <androidx.appcompat.widget.AppCompatAutoCompleteTextView
    android:id="@+id/dropdown"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</com.google.android.material.textfield.TextInputLayout>

res/layout/item_dropdown_menu.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:ellipsize="end"
    android:maxLines="1"
    android:textAppearance="?attr/textAppearanceSubtitle1"/>


그건 그렇고, android:ellipsize="end"android:ellipsize="start" 로 설정하면 텍스트를 전체 텍스트로 표시할 수 있습니다.
final AutoCompleteTextView view = root.findViewById(R.id.dropdown);
ArrayAdapter<String> adapter = new ArrayAdapter<>(
    view.getContext(), 
    R.layout.item_dropdown_menu, 
    new String[]{
        "選択値1",
        "選択値2",
        "選択値3",
        "選択値4",
        "選択値5",
});
view.setAdapter(adapter);

그러나, 이대로는 텍스트 박스를 선택했을 때에 드롭다운 메뉴가 표시되고 있는데 키보드도 표시되어 버립니다.
AutoCompleteTextViewEditText 이기 때문에 커서도 표시됩니다.



어디까지나 구체 l. 이오 는 디자인의 가이드 라인이므로, 디자인에 대해서만 기재되어 있습니다.

드롭다운 메뉴 디자인

텍스트 필드 디자인

여기에서 hint의 색 변경 등의 풍부한 움직임은 유지하면서,
커서나 키보드가 표시되지 않는 다음과 같은 이미지로 하고 싶네요.



커서 숨기기



AutoCompleteTextView 레이아웃 파일에 android:cursorVisible="false"를 추가합니다.

키보드 숨기기



초점을 맞추었을 때의 풍부한 움직임은 그대로,
키보드를 숨기는 방법은 다음 코드로 얻을 수 있습니다.
AutoCompleteTextViewandroid:focusable="true"android:focusableInTouchMode="true"
  • 레이아웃 파일
  • <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/lyt_dropdown"
        style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:hint="項目名1">
    
        <androidx.appcompat.widget.AppCompatAutoCompleteTextView
        android:id="@+id/dropdown"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:cursorVisible="false"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:maxLines="1"
        android:text="選択肢1"
        android:textSize="18sp"
        tools:ignore="LabelFor" />
    
    </com.google.android.material.textfield.TextInputLayout>
    
  • java의 경우
  • AutoCompleteTextView view = findViewById(R.id.dropdown);
    view.setShowSoftInputOnFocus(false);
    
  • kotlin의 경우
  • dropdown.setShowSoftInputOnFocus = false
    

    환경



    Android Studio 4.1.1
    Build #AI-201.8743.12.41.6953283, built on November 5, 2020
    Runtime version: 1.8.0_242-release-1644-b01 amd64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
    Windows 10 10.0
    GC: ParNew, ConcurrentMarkSweep
    Memory: 4029M
    Cores: 8
    Registry: ide.new.welcome.screen.force=true, external.system.auto.import.disabled=true
    Non-Bundled Plugins: org.jetbrains.kotlin, com.developerphil.adbidea

    좋은 웹페이지 즐겨찾기