Настройка 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, но он не работает!

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 потерял фокус. Затем, постукивая по нему, снова будет работать настройка.

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

Проблема, с которой вы столкнулись, теперь является известной ошибкой платформы, описанной здесь: 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 теряет фокус. Затем, когда вы снова нажимаете кнопку, настройка будет работать по назначению. (Проводка в качестве ответа с момента отказа от редактирования).

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

  <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

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

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

В 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

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

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

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