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

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

  1. EditText
  2. ListView

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

EditText.setSelected(false);

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

Ответы [ 49 ]

6 голосов
/ 31 мая 2013

Обязательно удалите строку "<requestFocus />" из тега EditText в xml.

<EditText
   android:id="@+id/input"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">

   <requestFocus /> <!-- remove this line --> 
</EditText>
5 голосов
/ 15 февраля 2011

Я использую следующий код, чтобы удерживать EditText от кражи фокуса при нажатии моей кнопки.

addButton.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        View focused = internalWrapper.getFocusedChild();
        focused.setVisibility(GONE);
        v.requestFocus();
        addPanel();
        focused.setVisibility(VISIBLE);
    }
});

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

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

5 голосов
/ 28 сентября 2016
View current = getCurrentFocus();

if (current != null) 
    current.clearFocus();
5 голосов
/ 16 января 2017

Когда ваша активность открыта, клавиатура становится видимой автоматически, что вызывает фокусировку EditText. Вы можете отключить клавиатуру, написав следующую строку в теге активности в файле manifest.xml.

 android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
5 голосов
/ 11 сентября 2017

Самый простой способ скрыть клавиатуру - использовать setSoftInputMode

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

или вы можете использовать InputMethodManager и скрыть клавиатуру следующим образом.

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
4 голосов
/ 10 июля 2015
/** 
 * set focus to top level window
 * disposes descendant focus 
 * disposes softInput 
 * */
public static void topLevelFocus(Context context){
    if(Activity.class.isAssignableFrom(context.getClass())){
        ViewGroup tlView = (ViewGroup) ((Activity) context).getWindow().getDecorView();
        if(tlView!=null){
            tlView.setFocusable(true);
            tlView.setFocusableInTouchMode(true);
            tlView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
        }
    }
}
3 голосов
/ 06 июня 2013

EditText в пределах ListView не работает должным образом. Лучше использовать TableLayout с автоматически сгенерированными строками, когда вы используете EditText.

3 голосов
/ 05 декабря 2013

Вы можете указать фокус на некоторый другой виджет, используя фокус запроса, а также использовать скрывающий код клавиатуры.

2 голосов
/ 09 сентября 2018

У вас есть редактировать текст и список. В OnStart / On Create вы должны установить фокус на виде списка: Listview.requestfocus()

2 голосов
/ 12 июня 2014

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">


<item android:drawable="@drawable/text_field_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/text_field_focused" android:state_focused="true"/>
<item android:drawable="@drawable/text_field_normal"/>

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