Сота (3.1) AdjustResize больше не работает? - PullRequest
12 голосов
/ 06 июля 2011

Моя активность имеет android: windowSoftInputMode = "AdjustResize" и ведет себя соответственно в Android 2.1:

До появления программной клавиатуры

Before soft keyboard appears

С клавиатурой

Keyboard behavior in 2.1 (good)

Однако в Honeycomb программная клавиатура не изменяет размер моего макета, вместо этого она покрывает кнопки:

Keyboard behavior in Honeycomb (bad)

Одинаковое поведение на обоих10-дюймовый планшет Galaxy и Motorola Xoom.

Я несколько раз переделывал свой макет, пытаясь сделать его совместимым с Honeycomb, но безрезультатно.Программная клавиатура вызывает представление EditText, но не кнопки.

Вот простой проект приложения, демонстрирующий проблему.

Редактировать : ссылка исправлена.

Используемый макет:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:layout_alignParentBottom="true">
        <Button
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Save" />
        <Button
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancel" />
    </LinearLayout>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true">
        <EditText
            android:layout_height="wrap_content"
            android:layout_width="fill_parent" />
    </ScrollView>
</RelativeLayout>

Единственная проблема, с которой я столкнулся, это this , но отключение аппаратного ускорения для меня не помогло.Я также прочитал руководство Android по обеспечению совместимости вашего приложения с методами ввода , но не нашел там никакого решения.

Я что-то делаю явно неправильно?Или это ошибка у кого-то есть больше информации о?

Ответы [ 3 ]

14 голосов
/ 15 июля 2011

Привет, я проверил твой код.

, пожалуйста, удалите строку ниже в " AndroidManifest.xml "

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

, а затем проверьте и отрегулируйте размер экрана.

Если какой-либо запрос, пожалуйста, дайте мне знать.

3 голосов
/ 12 июля 2011

Режим AdjustResize определенно работает; вы увидите его в действии по всему интерфейсу.

Итак, вопрос: почему он не установлен для вашего приложения?

Прежде всего, вы можете использовать «окно adb shell dumpsys», чтобы увидеть информацию о вашем окне, которая будет включать режим мягкого ввода, устанавливаемый его WindowManager.LayoutParams. Значение, напечатанное там, является необработанным числом; посмотрите здесь на его значение: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_NOTHING

Если ваше окно на самом деле не имеет настройки AdjustResize, вам нужно покопаться и посмотреть, почему это не устанавливается. В остальном все нормально, если вы установите этот режим для активности, он будет установлен в окне, как всегда. Возможно, вы захотите найти что-то еще, что вы делаете, и это вызывает изменение в вашем окне.

Если в вашем окне действительно есть selectedResize, то по какой-то причине ваша иерархия представления фактически не изменяется. Я не знаю серьезных различий в платформе, которые могли бы привести к тому, что это не сработало (и снова вы можете видеть, что оно работает в другом месте стандартного пользовательского интерфейса). Первое, что я бы предложил сделать здесь, - это использовать HierarchyViewer, чтобы увидеть, что происходит в вашей иерархии представлений.

1 голос
/ 27 октября 2013

AdjustResize потерпит неудачу, когда ваша деятельность находится в полноэкранном режиме, как отслеживается здесь: https://code.google.com/p/android/issues/detail?id=5497&can=1&q=honeycomb%20fullscreen&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

Я нашел обходной путь, который работал для меня, вы можете попробовать: https://stackoverflow.com/a/19494006/1241783

Приветствия

...