Как установить фокус на вид при создании и отображении макета? - PullRequest
86 голосов
/ 28 января 2010

В настоящее время у меня есть макет, который содержит Button, TextView и EditText. Когда отображается раскладка, фокус будет автоматически установлен на EditText, что приведет к появлению клавиатуры на телефоне Android. Это не то, что я хочу. Можно ли каким-либо образом установить фокус на TextView или вообще ничего при отображении макета?

Ответы [ 16 ]

102 голосов
/ 28 января 2010

Установить фокус: рамки будут обработаны перемещение фокуса в ответ на пользователя вход. Чтобы заставить сосредоточиться на конкретном посмотреть, позвонить requestFocus ()

17 голосов
/ 09 декабря 2010

Это работает:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
5 голосов
/ 18 января 2012

Вы можете попробовать просто спрятать клавиатуру. Примерно так:

InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
5 голосов
/ 17 декабря 2011

Чтобы установить фокус, задержите requestFocus () с помощью обработчика.

private Handler mHandler= new Handler();

public class HelloAndroid extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout);

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( 
           LinearLayout.LayoutParams.FILL_PARENT,
           LinearLayout.LayoutParams.WRAP_CONTENT);

     EditText edit = new EditText(this);
     edit.setLayoutParams(params);
     mainVw.addView(edit);

     TextView titleTv = new TextView(this);
     titleTv.setText("test");
     titleTv.setLayoutParams(params);
     mainVw.addView(titleTv);

     mHandler.post(
       new Runnable() 
       {
          public void run() 
          {
            titleTv.requestFocus();
          } 
       }
     );
   }
}
4 голосов
/ 20 сентября 2010

Установить

 android:focusable="true"

в вашем <EditText/>

3 голосов
/ 30 мая 2011

Установите также эти строки на OnResume и убедитесь, что для focusableInTouch установлено значение true, пока вы инициализируете элементы управления

<controlName>.requestFocus();

<controlName>.requestFocusFromTouch();
3 голосов
/ 11 марта 2011

Вы должны добавить это:

android:focusableInTouchMode="true"
3 голосов
/ 22 июня 2010

Попробуйте

comp.requestFocusInWindow();
2 голосов
/ 27 марта 2018

для изменения фокуса сделайте textView в xml фокусируемым

<TextView
            **android:focusable="true"**
            android:id="@+id/tv_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

и в Java на создание

textView.requestFocus();

или просто спрятать клавиатуру

public void hideKeyBoard(Activity act) {
    act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
}
2 голосов
/ 16 февраля 2012

Ни один из ответов выше не работает для меня. Единственное (скажем) решение состояло в том, чтобы изменить первый TextView в отключенном EditText , который получает фокус, а затем добавить

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

в обратном вызове onCreate для предотвращения отображения клавиатуры. Теперь мой первый EditText выглядит как TextView, но, наконец, может получить начальный фокус.

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