Подтвердить что ты не робот

Как сделать 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 при запуске выглядел как второй скриншот, а не как первый?

4b9b3361

Ответ 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>