Отключить автофокус при редактировании текста - PullRequest
48 голосов
/ 29 сентября 2011

У меня есть текст для редактирования:

   <LinearLayout android:id="@+id/linearLayout7" android:layout_width="match_parent" android:layout_height="wrap_content">
        <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1" android:id="@+id/editText1" android:text="3">
            <requestFocus></requestFocus>
        </EditText>
        <Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/button2"></Button>
    </LinearLayout>

, а затем некоторые другие вещи под

Проблема, с которой я столкнулся, заключается в том, что когда приложение запускает приложение, фокус на вводе,Я не хочу, чтобы фокус был на входе в момент запуска приложения.

Я попытался удалить вещь

<requestFocus></requestFocus>

, но ничего не сделал.

Ответы [ 11 ]

124 голосов
/ 29 сентября 2011

Добавьте элементы android:focusable="true" и android:focusableInTouchMode="true" в родительский макет EditText следующим образом;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout7" android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true" android:focusableInTouchMode="true">

Я думаю, это должно вам помочь.

7 голосов
/ 10 августа 2016

НЕТ Больше работы ... просто добавьте android: windowSoftInputMode = "stateAlwaysHidden" в тег активности файла Manifest.xml.

4 голосов
/ 05 января 2018

Если вы хотите очистить фокус по умолчанию для редактируемого текста, используйте следующие 2 атрибута

android:focusable="false"
 android:focusableInTouchMode="true"

внутри родительского линейного макета.

, например:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:focusableInTouchMode="true"
            android:orientation="vertical">


     <EditText
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="email id"
         android:inputType="textEmailAddress"
         android:maxLines="1"
    />

</LinearLayout>

Если вы хотите скрыть клавиатуру при создании активности, используйте следующие атрибуты внутри тега активности файла манифеста, например:

 <activity
     android:configChanges="screenSize|orientation|keyboardHidden"
     android:screenOrientation="portrait"
     android:name=".activities.LoginActivity"
     android:windowSoftInputMode="stateHidden|adjustResize"/>

Если вы хотите скрыть клавиатуру при нажатии кнопки или при возникновении какого-либо события, используйтеследующий код

 public void onClick(View v) {
                try {
                    //InputMethodManager is used to hide the virtual keyboard from the user after finishing the user input
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm.isAcceptingText()) {
                        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
                    }
                } catch (NullPointerException e) {
                    Log.e("Exception", e.getMessage() + ">>");
                }
                    }
                } catch (NullPointerException e) {
                    Log.e("Exception", e.getMessage() + ">>");
                }

Если вы хотите снять фокус с полей редактирования текста после выхода из действия

@Override
    protected void onResume() {
        super.onResume();
        mEmail.clearFocus();
        mPassword.clearFocus();
}

И, наконец, если вы хотите очистить данные в полях редактирования текстапри отправке формы используйте

 @Override
    protected void onResume() {
        super.onResume();
        mEmail.getText().clear();
        mPassword.getText().clear();
    }
3 голосов
/ 24 августа 2017
<LinearLayout 
    android:focusable="true"
    android:focusableInTouchMode="true" 
    android:layout_width="0px"
    android:layout_height="0px" />

 <EditText android:text="" 
    android:id="@+id/EditText01"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:hint="@string/hint">
 </EditText>

Никакого другого кодирования не требуется, это простое и понятное решение.

2 голосов
/ 07 февраля 2018

Вы можете использовать скрытый оконный режим ввода для скрытия клавиатуры и android:focusable="false" и android:focusableInTouchMode="true"

<activity
    android:name=".MainActivity"
    android:windowSoftInputMode="stateHidden"
    android:label="@string/app_name"
    >

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
1 голос
/ 14 октября 2016
<EditText
        android:id="@+id/input"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:focusable="false"
        android:focusableInTouchMode="false" />

detailInputView = (EditText) debugToolsView.findViewById(R.id.input);
    detailInputView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            detailInputView.setFocusable(true);
            detailInputView.setFocusableInTouchMode(true);
            return false;
        }
    });
0 голосов
/ 19 июня 2019

для очистки по умолчанию requestFocuse вы должны установить родительский фокус вашего Viewable = "true", как показано ниже

<android.support.constraint.ConstraintLayout
                android:id="@+id/coordinatorChild"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="true"
                android:focusableInTouchMode="true">
0 голосов
/ 01 апреля 2019

Это сработало для меня, желание также поможет вам.

Либо:

android:windowSoftInputMode="stateAlwaysHidden"

добавьте это свойство в ваш файл Manifest.xml под этим конкретным действиемгде вы хотите отключить автофокус. Минусы: Он будет скрывать только вашу мягкую клавиатуру, курсор будет все еще там.

Остальное:

 android:focusableInTouchMode="true"

добавьте это свойство в ваш XML-файл пользовательского интерфейса (в родительском макете), чтобы оно скрывало фокус и клавиатуру.

0 голосов
/ 04 февраля 2019

попробуйте этот код в LinearLayout

 <LinearLayout
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText

            android:hint="Search..."
            android:drawableRight="@drawable/ic_search"
            android:id="@+id/search_tab_hotbird_F"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyHotbird_F"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="4dp">

        </android.support.v7.widget.RecyclerView>

    </LinearLayout>
0 голосов
/ 07 июня 2017

Хей Ли ,

Есть несколько способов сделать это, Мудассир дал вам способ сделать это.

Если идея не работает, тогда просто сделайте простую вещь -

В вашем AndroidManifest>Activity добавьте этот простой код:

android:windowSoftInputMode="stateHidden"

Ничего не нужно делать в EditTextв XML все будет работать, и фокус не появится.

Посмотрите пример из реальной жизни:

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="stateHidden"
        android:label="@string/app_name"
        >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
...