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

Настройка Android не работает после первого раза

Моя проблема: начиная со второго раза клавиатура программного обеспечения отображается на экране, она полностью скрывает мой EditText.

Атрибут android: windowSoftInputMode = "adjustPan" указан в AndroidManifest.xml, но он работает только в первый раз.

У меня есть следующий макет:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="464dp"
        android:gravity="top"
        android:orientation="vertical"
        android:paddingLeft="16dp"
        android:paddingRight="16dp" >

        <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="10"
            android:background="#E3E3E2"
            android:gravity="top" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <EditText
                android:id="@+id/addListText"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="10"
                android:contentDescription="@string/addItemContentDescription"
                android:gravity="bottom|center_horizontal"
                android:inputType="textLongMessage"
                android:textColor="#E3E3E2"
                android:visibility="gone" />

            <ImageButton
                android:id="@+id/addTextListButton"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:layout_gravity="right"
                android:background="@android:color/transparent"
                android:contentDescription="@string/addItemButton"
                android:scaleType="fitCenter"
                android:src="@drawable/plus_add"
                android:visibility="gone" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:gravity="bottom|center_horizontal"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingRight="16dp" >

        <ImageButton
            android:id="@+id/syncListsButton"
            android:layout_width="64dp"
            android:layout_height="match_parent"
            android:src="@android:drawable/ic_popup_sync" />

        <ImageButton
            android:id="@+id/showOrHide"
            android:layout_width="64dp"
            android:layout_height="match_parent" />

        <ImageButton
            android:id="@+id/delListButton"
            android:layout_width="64dp"
            android:layout_height="match_parent"
            android:src="@android:drawable/ic_menu_delete" />
    </LinearLayout>
</LinearLayout>

Кнопка "showOrHide" показывает/скрывает комбо "addListText" / "addTextListButton".

Когда EditText отображается в первый раз, и я касаюсь его, на экране появляется мягкая клавиатура, и комбинация "addListText" / "addTextListButton" запускается правильно. Когда я скрываю клавиатуру, а затем снова показываю ее, клавиатура полностью закрывает окно редактирования addListText!

Любая идея о том, что происходит? Я тестирую его на Android 4.2.2.

Пожалуйста, помогите! Спасибо: -)

edit: Я также попытался перенести первый LinearLayout внутри ScrollView, но он не работает!

4b9b3361

Ответ 1

subclassed EditText и переопределяет метод onKeyPreIme (int keyCode, событие KeyEvent) следующим образом:

   @Override
   public boolean onKeyPreIme(int keyCode, KeyEvent event)
   {
      if(keyCode == KeyEvent.KEYCODE_BACK)
        {
            clearFocus();
        }
   return super.onKeyPreIme(keyCode, event);
   }

Теперь, когда нажата задняя клавиша, EditText потерял фокус. Затем, постукивая по нему, снова будет работать настройка.

Ответ 2

Это может показаться немного глупым, но я столкнулся с этой проблемой, когда я установил свойство тяжести моего EditText как "center_horizontal", так и "center". Та же проблема возникает при использовании textAlignment 'center'. Удалите его, и вы не столкнетесь с проблемой клавиатуры, скрывающей EditText второй раз (и последующих), когда клавиатура выходит.

Ответ 3

Проблема, с которой вы столкнулись, теперь является известной ошибкой платформы, описанной здесь: https://code.google.com/p/android/issues/detail?id=182191

Исправление не будет передано обратно и так не вступит в силу до Android N. Пока Android N не является минимальным SDK, следующее решение является обходным решением.

Вы можете создать собственный класс, расширяющий EditText, и переопределить метод onKeyPreIme (int keyCode, событие KeyEvent) следующим образом:

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
   if(keyCode == KeyEvent.KEYCODE_BACK)
     {
         clearFocus();
     }
return super.onKeyPreIme(keyCode, event);
}

Вы также должны убедиться, что макет более высокого уровня имеет возможность фокусироваться, поэтому фокус EditText может быть успешно удален. Для вас могут работать следующие атрибуты:

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

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

Ответ 4

Вот код, который я изначально использовал, столкнулся с этой проблемой:

    <EditText
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:gravity="center" />

Когда я удалил центральную гравитационную линию из EditText, панорамирование работало:

android:gravity="center"

Я работал над этим, обертывая EditText в FrameLayout и центрируя весь EditText в FrameLayout. Единственная проблема, которую он вызывает, заключается в том, что EditText будет по меньшей мере шириной hinttext, поэтому первые несколько символов/слов, набранных, не будут центрированы. Это было хорошо для меня, но ваш пробег может отличаться:)

<FrameLayout
    android:layout_width="250dp"
    android:layout_height="wrap_content">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
</FrameLayout>

EDIT: этот обход обрывается, если пользователь нажимает на самое последнее слово в edittext. Я использую обходное решение onKeyPreIme

Ответ 5

Для меня переопределение onKeyPreIme не работает. Поэтому вместо этого я переопределяю dispatchKeyEventPreIme.

@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
    if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){
     clearFocus();
    }
    return super.dispatchKeyEventPreIme(event);
}

Ответ 6

В EditText android:layout_gravity="center" Создайте этот тип проблемы. Если вы хотите, чтобы текст стал центром, вы можете сделать это.

Шаг1: для макета

 <LinearLayout
                android:id="@+id/linerPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/imageView2"
                android:gravity="center">

                <EditText
                    android:id="@+id/editText2"
                    android:layout_width="wrap_content"
                    android:layout_height="40dp"
                    android:background="@null"
                    android:hint="*****"
                    android:layout_marginLeft="-40dp"
                    android:paddingLeft="10dp"
                    android:paddingRight="10dp"
                    android:inputType="textPassword"
                    android:textColor="@color/white"
                    android:textColorHint="@color/white"
                    android:textSize="18sp" />
            </LinearLayout>

step2: Некоторые вещи программно

 linerUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(mETUserName, 0);
            mETUserName.requestFocus();    
        }
    });

Наконец, работаем очень хорошо. Я нашел это решение для настройки softKeyboard

Ответ 7

Обычно скобка настройки не работает после первого нажатия кнопки "Назад", попробуйте сделать это следующим образом: - (может быть реализовано для EditText, AutoCompleteTextView или любого другого вида, в котором неверно работает)

 @Override
    public void onBackPressed() {
        editText.clearFocus();
        editText.setCursorVisible(false);
    }

Надежда Это помогает кому-то

Ответ 8

После попытки множества решений в файле манифеста, Я решил это ниже, adjustPan с относительной компоновкой не работает,

Ваш родительский макет должен быть LinearLayout

Надеюсь, это экономит время для людей.