Я разрабатываю приложение, которое содержит расширяемый список. В конце каждого списка пустая EditText
готова к отправке комментариев. У меня есть следующая проблема; когда я касаюсь EditText
, экран слегка изменяется (не проблема, поскольку изменение размера не всегда происходит, в зависимости от моего макета и положения списка EditText
int it), и появляется мягкая клавиатура. Однако во время этих событий EditText
теряет фокус и не восстанавливает его. Это довольно неудобно, так как без фокуса, несмотря на доступность клавиатуры, вход с клавиатуры не достигает EditText
. Как только я снова коснусь его, EditText
будет вести себя так, как ожидалось.
Это становится еще страннее. Когда клавиатура все еще отображается, я могу коснуться другого EditText
, и это произойдет; он теряет фокус. Однако, как только я прошел начальную потерю фокуса, я могу свободно перемещаться между ранее затронутыми EditText
без каких-либо проблем, связанных с фокусом. Только когда я скрою мягкую клавиатуру, исчезнет "состояние", и мне нужно будет дважды нажать EditText
, прежде чем сможете их редактировать.
Вот выдержки из моего кода. Во-первых, empty_comment.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/blank_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textCapSentences"
android:imeOptions="actionDone"
android:hint="@string/hint"
android:layout_marginLeft="30dip" >
</EditText>
</LinearLayout>
Здесь выдержка из фрагмента, где я использую рассматриваемый макет:
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_empty, null);
final EditText editText = (EditText) convertView.findViewById(R.id.blank_box);
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if(actionId == EditorInfo.IME_ACTION_DONE)
{
// Unrelated code
}
return true;
}
});
Я не указываю ничего конкретного в моем файле манифеста, но я мог бы предоставить его, если сочтет это полезным.
Update:
Добавление строки в Activity
для настройки панорамирования android:windowSoftInputMode="adjustPan"
частично решает проблему. Он заменяет текущее неожиданное поведение проблемой, что EditText
виды могут быть скрыты с помощью мягкой клавиатуры.
В настоящее время не найдено ни одного идеального решения, а подходило. Взгляните на комментарии в принятом ответе, они могут оказаться полезными для вас!