У меня есть приложение Android, которое является TabHost с веб-представлением. Я использую его для загрузки определенного файла HTML, который имеет текстовое поле в его нижней части.
Когда я касаюсь текстового поля HTML, программируемая клавиатура открывается и скрывает текстовое поле, так, чтобы я не видел то, что я ввел.
Вот расположение:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TabWidget
android:focusableInTouchMode="false"
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="63dp" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
Я попытался настроить файл AndroidManifest.xml с android:windowSoftInputMode="adjustResize"
без успеха. Я также попытался заменить FrameLayout
в моем расположении с ScollView
, но это вызвало мой webview
увеличиться в размере неограниченно долго, когда приложение работает.. это может произойти из-за некоторого JavaScript, у меня есть работа страницы.
Я заметил, что веб-браузер андроида имеет изящное поведение - в веб-странице, после того, как программируемая клавиатура открывается, прокрутки веб-страницы гладко так, чтобы focusable текстовое поле было видимо пользователю. Как у меня может быть этот вид поведения в моем приложении?
Я нашел решение этой проблемы. (примерно через неделю после того, как я разместил вопрос; мне нужно было только ответить в stackoverflow сегодня ...)
В моем коде были фрагменты, которые меняли высоту WebView (чтобы было место для TabBar). Оказывается, когда вы вызываете setLayoutParams в WebView, он больше не меняет свою высоту, даже если у вас установлен android: windowSoftInputMode = "adjustResize"
.
Я избежал необходимости изменять высоту WebView, добавив TabBar в файл макета main.xml с начальным размером 0. Когда я увеличиваю размер TabBar, размер WebView автоматически уменьшается, и он сохраняет android: windowSoftInputMode = "adjustResize"
поведение.