Вопрос по java, android, xml – Программная клавиатура покрывает EditText в PopupWindow

17

Я собрал простой тестовый проект, который отображает всплывающее окно, содержащее EditText (в Android 2.2). Когда я нажимаю EditText, отображается программная клавиатура, как я и ожидал. Однако программная клавиатура закрывает EditText, и я не могу заставить экран панорамировать, чтобы держать EditText в поле зрения так, как я бы думал. Мой код:

TestAdjustPanActivity.java:

package com.example;

import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.PopupWindow;

public class TestAdjustPanActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final PopupWindow pw = new PopupWindow(this);
        pw.setContentView(getLayoutInflater().inflate(R.layout.popup, null, false));
        pw.setWidth(400);
        pw.setHeight(600);
        pw.setFocusable(true);

        pw.setOutsideTouchable(true);
        pw.setTouchable(true);
        pw.setBackgroundDrawable(new BitmapDrawable());

        // This is the line referred to in the edit:
        pw.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

        findViewById(R.id.main).post(new Runnable() {
            public void run() {
            pw.showAtLocation(findViewById(R.id.main), Gravity.NO_GRAVITY, 0, 0);
            }
        });
    }
}

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

popup.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ScrollView 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:background="#666666"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/current_password"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="40dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="300dp" />
    </LinearLayout>

</ScrollView>

... и мой AndroidManifest.xml содержит строкуandroid:windowSoftInputMode="stateUnspecified|adjustPan" в теге для одного и того же действия в приложении.

Есть идеи? Ни один из других постов на SO, связанных с этой проблемой, не сделал это для меня. Чего мне не хватает, что не дает панорамированию так, как я ожидал?

РЕДАКТИРОВАТЬ: я попытался добавить строку в TestAdjustPanActivity, как указано, что заставило экран отлично панорамировать на устройстве Android 3.2, которое у меня есть. Тем не менее, он все еще не работает на моем устройстве Android 2.2, что делает это еще более запутанным.

Ваш Ответ

5   ответов
0

android:windowSoftInputMode="stateUnspecified|adjustPan 

в

android:windowSoftInputMode="stateHidden|adjustPan"
3

у для активной клавиатуры.

Left click on project select: "Android tools/New Resource File..." . Chose layout, give file name "main" (don't worry about conflicts). Click "next". Then on list on the left select "keyboard" and move it to right (click "->"). On right side select keyboard state. Click finish. Now copy content of your main.xml located in "res/layout" to new file in res/layout-keyssoft". Correct new layout in such way that keyboard is not in that way. Remember to maintain same "id"s for respective components in those two layouts (that is why copy paste was needed). Enjoy how it works

Прочитать оизменения конфигурации чтобы понять, как это работает. Обратите внимание, что КАЖДОЕ изменение конфигурации (изменение ориентации, изменение языка, ...) приведет к воссозданию Activity (в этом случае аргумент onCreate не равен нулю), поэтому вы можете предоставить разные макеты для разных случаев.

Согласно документации для Android, это работает только тогда, когда меняется фактическая доступность клавиатуры, а не когда, к сожалению, она просто отображается или скрывается. Однако в них упоминается свойство keyboardHidden класса Configuration, которое я рассмотрю. Спасибо! Lewis
1

ScrollView вXML,

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

1

android:windowSoftInputMode="stateUnspecified|adjustPan"

в

android:windowSoftInputMode="adjustPan"

только в вашем файле манифеста

4

кто столкнется с этой проблемой в будущем, я просто использовал Dialog вместо PopupWindow, и панорамирование, чтобы держать EditText в поле зрения, прекрасно работает на 2.2 с Dialog.

Похожие вопросы