Как сделать EditText не сфокусированным при создании Activity
Я читал другие вопросы, обсуждающие это, и все они работают для моих макетов, за исключением самого первого созданного.
На данный момент это верхняя часть моего метода onCreate
:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
^ Это делает его таким, по крайней мере, клавиатура не появляется при запуске, но EditText
по-прежнему сосредоточен на.
Это XML
для моего EditText
:
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/changePass"
android:layout_centerHorizontal="true"
android:layout_marginTop="167dp"
android:ems="10"
android:imeOptions="flagNoExtractUi"
android:inputType="textPassword"
android:maxLength="30" >
</EditText>
Вот как это выглядит, когда я поднимаю свою деятельность:
![enter image description here]()
Проблема в том, что на некоторых телефонах, когда EditText
сфокусирован таким образом, они не могут писать в нем. Я хочу, чтобы это не фокусировалось.
То, что я сделал, работает для следующих макетов, созданных в том EditTexts
что EditTexts
не сфокусирован и будет выглядеть примерно так:
![enter image description here]()
Обратите внимание, что это тот же макет, хотя. Это экран после того, как пользователь был возвращен к этому экрану, который не будет показывать ничего плохого в XML
потому что это тот же XML
, но проблема в том, что EditText
фокусируется только на создании действия.
Я провел исследование, и все остальные вопросы не помогают мне в этом (к счастью, они помогли клавиатуре не появляться). Как я могу сделать так, чтобы EditText
при запуске выглядел как второй скриншот, а не как первый?
Ответы
Ответ 1
Вы можете установить свойство макета как android:descendantFocusability="beforeDescendants"
и android:focusableInTouchMode="true"
Пример:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/changePass"
android:layout_centerHorizontal="true"
android:layout_marginTop="167dp"
android:ems="10"
android:imeOptions="flagNoExtractUi"
android:inputType="textPassword"
android:maxLength="30" >
</EditText>
</RelativeLayout>
Пусть это полезно;)
Ответ 2
Код XML:
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/changePass"
android:layout_centerHorizontal="true"
android:layout_marginTop="167dp"
android:ems="10"
android:focusable="false"
android:imeOptions="flagNoExtractUi"
android:inputType="textPassword"
android:maxLength="30" >
</EditText>
Код Java:
EditText edPwd = (EditText)findViewById(R.id.password);
edtPwd.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.setFocusable(true);
v.setFocusableInTouchMode(true);
return false;
}
});
установить focusable false в xml и установить его true с помощью кода
Ответ 3
В вашем main_layout
добавьте 2 строки:
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
Пример:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout>
Ответ 4
Добавьте это в onCreate()
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
или в onCreateView()
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Ответ 5
Код XML
<EditText
android:imeOptions="flagNoExtractUi"
android:focusable="false"
/>
Код Java в onClickListerner
mEdtEnterPhoneNumber.setFocusable(true);
mEdtEnterPhoneNumber.setFocusableInTouchMode(true);
Ответ 6
лучшее решение здесь:
https://stackoverflow.com/a/45139132/3172843
правильным и простым решением является setFocusable false и setFocusableInTouchMode true. поэтому усиление EditText фокусируется только тогда, когда пользователь прикасается к EditText
android:focusable="false"
android:focusableInTouchMode="true"
Ответ 7
Можно использовать android:focusable="false"
, чтобы отключить его, но если это по какой-то причине не работает, тогда вы можете просто положить LinearLayout
, и он будет фокусироваться, не нарушая ваш макет.
ПРИМЕЧАНИЕ. Eclipse даст вам сообщение о том, что ваш LinearLayout
бесполезен, потому что у него нет содержимого. Вы должны иметь возможность игнорировать его без проблем.
Например:
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="false"
android:layout_width="0dp"
android:layout_height="0dp"
/>
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/changePass"
android:layout_centerHorizontal="true"
android:layout_marginTop="167dp"
android:ems="10"
android:imeOptions="flagNoExtractUi"
android:inputType="textPassword"
android:maxLength="30" >
</EditText>
</LinearLayout>
Ответ 8
Вы можете сделать это программно. используйте editText.setEnabled(false)
в вашем методе onStart()
вашей деятельности (не в onCreate() - потому что это некоторый метод для инициализации компонентов GUI)
Ответ 9
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden" />
андроид: windowSoftInputMode = "stateAlwaysHidden"
Добавьте эту строку в тег активности файла Manifest.xml. Когда вы нажимаете на EditText, клавиатура попадает в фокус.
Ответ 10
Самый простой способ - это добавить
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
в теге активности файла Manifest.xml
Ответ 11
1) Проще всего открыть манифест и поместить следующий код между тегом активности:
android:windowSoftInputMode="stateHidden"
2) Поместите эти атрибуты в родительский макет
android:focusable="true"
android:focusableInTouchMode="true"
Ответ 12
В Manifest скопируйте и вставьте следующий код.
<activity
android:name=".LoginActivity"
android:windowSoftInputMode="stateAlwaysHidden"/>
Ответ 13
использовать android:focusable="false"
для отключения фокусировки
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/changePass"
android:layout_centerHorizontal="true"
android:layout_marginTop="167dp"
android:ems="10"
android:imeOptions="flagNoExtractUi"
android:inputType="textPassword"
android:maxLength="30"
android:focusable="false" >
</EditText>