В настоящее время у меня есть макет, содержащий a Button
, a TextView
и an EditText
. Когда отображается макет, фокус будет автоматически установлен на EditText
, что приведет к появлению клавиатуры на телефоне Android. Это не то, что я хочу. Есть ли способ установить фокус TextView
на пустом месте при отображении макета?
90
Вы должны добавить это:
android:focusableInTouchMode="true"
источник
Набор
android:focusable="true"
в вашем
<EditText/>
источник
Чтобы установить фокус, задержите requestFocus () с помощью Handler.
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(); } } ); } }
источник
Вы можете попробовать просто спрятать клавиатуру. Что-то вроде этого:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
источник
Пытаться
источник
Также установите эти строки
OnResume
и убедитесь, что дляfocusableInTouch
них установлено значение true, пока вы инициализируете свои элементы управления.источник
чтобы изменить фокус, сделайте 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); }
источник
Ни один из приведенных выше ответов не работает для меня. Единственным (скажем так) решением было изменить первый TextView в отключенном EditText, который получает фокус, а затем добавить
в обратном вызове onCreate, чтобы предотвратить отображение клавиатуры. Теперь мой первый EditText выглядит как TextView, но, наконец, может получить начальный фокус.
источник
Последнее предложение - правильное решение. Чтобы повторить, сначала установите
android:focusable="true"
вxml
файле макета , а затемrequestFocus()
в представлении в вашем коде.источник
Я думаю, что текстовое представление не фокусируется. Попробуйте, например, установить фокус на кнопку или установить для свойства focusable значение true.
источник
вы можете добавить текст редактирования размером «0 провал» в качестве первого элемента управления в ur xml, чтобы он сфокусировался на рендеринге. (убедитесь, что он настраивается и все ...)
источник
Вы можете начать с добавления
android:windowSoftInputMode
к своей деятельности вAndroidManifest.xml
файл.<activity android:name="YourActivity" android:windowSoftInputMode="stateHidden" />
Это заставит клавиатуру не отображаться, но
EditText
все равно будет в фокусе. Чтобы решить эту проблему, вы можете установитьandroid:focusableInTouchmode
иandroid:focusable
вtrue
корневом представлении.<LinearLayout android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" ... > <EditText ... /> <TextView ... /> <Button ... /> </LinearLayout>
Приведенный выше код обеспечит
RelativeLayout
фокусировку вместоEditText
источник
Фокус предназначен для выбора компонентов пользовательского интерфейса, когда вы используете что-то помимо сенсорного (например, d-pad, клавиатуру и т. Д.). Любое представление может получить фокус, хотя некоторые из них не доступны по умолчанию. (Вы можете сделать вид фокусируемым с помощью
setFocusable(true)
и принудительно сфокусировать его с помощьюrequestFocus()
.)Однако важно отметить, что когда вы находитесь в сенсорном режиме, фокусировка отключена . Поэтому, если вы используете пальцы, изменение фокуса программным способом ничего не дает. Исключением являются представления, которые получают ввод от редактора ввода. Вот
EditText
такой пример. В этой особой ситуацииsetFocusableInTouchMode(true)
используется, чтобы программная клавиатура знала, куда отправлять ввод.EditText
Имеет эту настройку по умолчанию. Программная клавиатура появится автоматически.Если вы не хотите, чтобы программная клавиатура появлялась автоматически, вы можете временно отключить ее, как отметил @abeljus:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Однако, когда пользователь нажимает на
EditText
, клавиатура все равно должна отображаться.Дальнейшее чтение:
источник