Остановите EditText от получения фокуса при запуске Activity - PullRequest
2679 голосов
/ 12 октября 2009

У меня есть Activity в Android, с двумя элементами:

  1. EditText
  2. ListView

Когда мой Activity запускается, EditText сразу же имеет фокус ввода (мигающий курсор). Я не хочу, чтобы какой-либо элемент управления имел фокус ввода при запуске. Я попробовал:

EditText.setSelected(false);

Не повезло. Как я могу убедить EditText не выбирать себя при запуске Activity?

Ответы [ 49 ]

15 голосов
/ 13 февраля 2011

Поздно, но может быть полезно. Создайте фиктивный EditText в верхней части макета, затем вызовите myDummyEditText.requestFocus() in onCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Кажется, это ведет себя так, как я ожидаю. Не нужно обрабатывать изменения конфигурации и т. Д. Мне это нужно для Действия с длинным TextView (инструкции).

13 голосов
/ 23 октября 2009

Да, я сделал то же самое - создал «фиктивную» линейную схему, которая получает начальный фокус. Кроме того, я установил «следующие» идентификаторы фокуса, чтобы пользователь больше не мог фокусироваться после однократной прокрутки:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

много работы только для того, чтобы избавиться от фокуса на представлении ..

Спасибо

12 голосов
/ 26 июля 2017

Напишите эту строку в вашем родительском макете ...

 android:focusableInTouchMode="true"
12 голосов
/ 14 мая 2014

Для меня то, что работает на всех устройствах, это:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

Просто поместите это как представление перед проблемным сфокусированным представлением, и все.

10 голосов
/ 31 марта 2015

Это идеальное и самое простое решение. Я всегда использую это в своем приложении.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
9 голосов
/ 03 января 2013

Самое простое, что я сделал, это установил фокус на другое представление в onCreate:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Это остановило всплывающую программную клавиатуру, и в EditText не мигало курсор.

8 голосов
/ 14 февраля 2012
<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>
8 голосов
/ 22 сентября 2016

Запишите этот код внутри Manifest файла в Activity, где вы не хотите открывать клавиатуру.

android:windowSoftInputMode="stateHidden"

Файл манифеста:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.projectt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="24" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
         <activity
            android:name=".Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Login"
            **android:windowSoftInputMode="stateHidden"**
            android:label="@string/app_name" >
        </activity>

    </application>

</manifest>
7 голосов
/ 23 мая 2013

На onCreate вашей Активности просто добавьте команду clearFocus() в свой элемент EditText. Например,

edittext = (EditText) findViewById(R.id.edittext);
edittext.clearFocus();

И если вы хотите перевести фокус на другой элемент, используйте requestFocus() для этого. Например,

button = (Button) findViewById(R.id.button);
button.requestFocus();
6 голосов
/ 14 июня 2015

Этого можно добиться, создав макет EditText с шириной и высотой макета, установленным на 0dp, и запросить фокусировку для этого вида. Добавьте следующий фрагмент кода в макет xml:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...