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

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

  1. EditText
  2. ListView

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

EditText.setSelected(false);

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

Ответы [ 49 ]

39 голосов
/ 17 марта 2014

Простое решение: В AndroidManifest в Activity теге используйте

android:windowSoftInputMode="stateAlwaysHidden"
38 голосов
/ 18 апреля 2018

Поздний, но самый простой ответ, просто добавьте его в родительский макет XML.

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

Upvote, если это помогло вам! Удачного кодирования:)

34 голосов
/ 06 ноября 2011

Вы можете просто установить "фокусируемый" и "фокусируемый в сенсорном режиме" , чтобы установить значение true для первого TextView из layout. Таким образом, когда действие начинается, TextView будет сфокусировано, но из-за его характера вы не увидите ничего сфокусированного на экране и, конечно, будет отображаться клавиатура нет ...

33 голосов
/ 08 апреля 2014

Следующее сработало у меня в Manifest. Пишите,

<activity
android:name=".MyActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>
28 голосов
/ 28 сентября 2012

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

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

Вот и все. Исправил мою проблему мгновенно. Спасибо, Сильвер, за то, что указал мне правильное направление.

26 голосов
/ 24 июня 2015

Добавьте android:windowSoftInputMode="stateAlwaysHidden" в тег активности файла Manifest.xml.

Источник

22 голосов
/ 07 марта 2011

Если у вас есть другой взгляд на вашу деятельность, например ListView, вы также можете сделать:

ListView.requestFocus(); 

в вашем onResume(), чтобы захватить фокус с editText.

Я знаю, что на этот вопрос дан ответ, но я просто предоставляю альтернативное решение, которое сработало для меня:)

21 голосов
/ 21 декабря 2015

Добавьте следующий метод onCreate:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
20 голосов
/ 12 июня 2011

Попробуйте это перед вашим первым редактируемым полем:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();
17 голосов
/ 24 апреля 2013

Поскольку мне не нравится загрязнять XML чем-то, что связано с функциональностью, я создал этот метод, который «прозрачно» крадет фокус с первого фокусируемого представления, а затем при необходимости убирает себя!

public static View preventInitialFocus(final Activity activity)
{
    final ViewGroup content = (ViewGroup)activity.findViewById(android.R.id.content);
    final View root = content.getChildAt(0);
    if (root == null) return null;
    final View focusDummy = new View(activity);
    final View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            view.setOnFocusChangeListener(null);
            content.removeView(focusDummy);
        }
    };
    focusDummy.setFocusable(true);
    focusDummy.setFocusableInTouchMode(true);
    content.addView(focusDummy, 0, new LinearLayout.LayoutParams(0, 0));
    if (root instanceof ViewGroup)
    {
        final ViewGroup _root = (ViewGroup)root;
        for (int i = 1, children = _root.getChildCount(); i < children; i++)
        {
            final View child = _root.getChildAt(i);
            if (child.isFocusable() || child.isFocusableInTouchMode())
            {
                child.setOnFocusChangeListener(onFocusChangeListener);
                break;
            }
        }
    }
    else if (root.isFocusable() || root.isFocusableInTouchMode())
        root.setOnFocusChangeListener(onFocusChangeListener);

    return focusDummy;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...