EditText Android скрыт, когда отображается виртуальная клавиатура и задействован SurfaceView - PullRequest
10 голосов
/ 05 июня 2010

У меня простой пользовательский интерфейс: EditText должен быть расположен ниже SurfaceView. Я использую RelativeLayout, чтобы расположить эти два представления.

Теперь, когда я нажимаю на EditText, чтобы открыть виртуальную клавиатуру, SurfaceView скользит вверх, но EditText скрыт и не показывает набранную строку.

Для воспроизведения используйте следующий XML-код макета:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout01"
android:layout_height="fill_parent" 
android:layout_width="fill_parent">

<SurfaceView
android:id="@+id/SurfaceView01"
android:layout_width="fill_parent" 
android:layout_height="wrap_content">
</SurfaceView>

<EditText 
android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentLeft="true" 
android:layout_alignParentBottom="true" 
android:selectAllOnFocus="true"
android:textStyle="normal"
android:singleLine="true">
</EditText> 

</RelativeLayout>

Основной класс Activity должен отображать только макет. Когда я запускаю программу и нажимаю EditText, появляется виртуальная клавиатура, но поле EditText пропало.

Возможно, RelativeLayout вызывает проблемы, но я не знаю, как воспроизвести тот же макет с другим классом Layout.

Любые предложения приветствуются, я очень ценю вашу помощь.

Спасибо.

Edit:

Вот два снимка экрана: один показывает EditText внизу без виртуальной клавиатуры, другой с виртуальной клавиатурой, но без EditText. Интересно отметить, что SurfaceView и EditText фактически сдвигаются вверх, EditText просто исчезает. Кстати, это также происходит с кнопкой, если она находится рядом с EditText.

EditText под SurfaceView (слева); EditText пропал (справа)

Ответы [ 4 ]

8 голосов
/ 05 августа 2012

Как заметил комментатор в ветке об этой ошибке , очень легко решить эту проблему, установив прозрачный цвет фона SurfaceView или GLSurfaceView с помощью mSurfaceView.setBackgroundColor(Color.TRANSPARENT); .

Эта проблема возникла у меня при нажатии EditText на Honeycomb (v13) на Samsung Galaxy Tab 10.1. Проблема заключалась в том, что после изменения размера GLSurfaceView на его месте все еще оставался черный прямоугольник, который закрывал EditText. Это решение работает, делая этот ошибочный прямоугольник прозрачным, чтобы можно было видеть EditText.

1 голос
/ 08 сентября 2013

Добавьте следующий код вашей активности в ваш AndroidManifest.xml android:windowSoftInputMode="adjustPan"

0 голосов
/ 21 октября 2015

Я обнаружил, что на разных устройствах результат будет разным. Затем я использую ScrollView в качестве корневого представления и помещаю макет в ScrollView, при использовании полноэкранного режима он работает нормально. и обязательно установите android: fillViewport = "true", если у вас все еще есть проблемы, дайте мне знать liananse@163.com

0 голосов
/ 12 июня 2015

Да, это правильно! Добавьте следующий код для своей активности в свой AndroidManifest.xml android:windowSoftInputMode="adjustPan"

А в тексте редактирования просто добавьте:

android:imeOptions="flagNoFullscreen"
...