Как сделать 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>

Вот как это выглядит, когда я поднимаю свою деятельность:

Проблема в том, что с некоторыми телефонами, когда EditText сосредоточены так, они не могут писать в нем. Я хочу, чтобы это не фокусировалось.

То, что я сделал, работает для следующих макетов, поднятых в том, что это EditTexts не ориентированы и будут выглядеть так:

Обратите внимание, что это тот же макет, хотя. Это экран после того, как пользователь был возвращен к этому экрану, который бы ничего не указывал на XML потому что это то же самое XML, но проблема в том, что EditText сосредоточено только на том, когда деятельность создана.

Я провел исследование, и все остальные вопросы не помогают мне в этом (к счастью, они помогли клавиатуре не появляться). Как я могу сделать это так EditText при запуске будет выглядеть второй скриншот, а не первый?

14 ответов

Решение

Вы можете установить свойство Layout как 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>

Пусть это будет полезно;)

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;
        }
    });

установить фокусируемое значение false в xml и установить его истинным с помощью кода

В вашем 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>

Лучшее решение здесь: https://stackru.com/a/45139132/3172843

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

android:focusable="false"
android:focusableInTouchMode="true"

Всякий раз, когда я пытаюсь открыть Editext после выбора элемента Spinner, поэтому в это время я не могу открыть клавиатуру и записать значения в тексте редактирования, но я решил свою проблему с этим кодом.

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

      <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:descendantFocusability="beforeDescendants"
                android:focusableInTouchMode="true">
    
                <androidx.appcompat.widget.AppCompatEditText
                    android:id="@+id/titleName"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:inputType="textCapWords"
                    android:hint="@string/hint_your_full_name"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>

Спасибо!

Добавьте это в onCreate()

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

или в onCreateView()

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

XML-код

<EditText 
    android:imeOptions="flagNoExtractUi"
    android:focusable="false"
    />

Java-код в onClickListerner

 mEdtEnterPhoneNumber.setFocusable(true);
    mEdtEnterPhoneNumber.setFocusableInTouchMode(true);

Вы можете сделать это программно. использование editText.setEnabled(false) в вашем onStart() метод вашей деятельности (не в onCreate() - потому что это какой-то метод для инициализации компонентов GUI)

<activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateAlwaysHidden" />

андроид:windowSoftInputMode="stateAlwaysHidden"

добавьте эту строку в тег активности файла Manifest.xml. когда вы нажимаете на TextEdit, клавиатура попадает в фокус.

В Manifest скопируйте и вставьте следующий код.

 <activity
   android:name=".LoginActivity"
   android:windowSoftInputMode="stateAlwaysHidden"/>

Можно использовать 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>

Самый простой способ - это добавить

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

в теге активности файла Manifest.xml

1) Проще всего открыть манифест и поместить следующий код между тегом активности:

android:windowSoftInputMode="stateHidden"

2) Поместите эти атрибуты в родительский макет

android:focusable="true" 
android:focusableInTouchMode="true"

Использование 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>
Другие вопросы по тегам