软键盘覆盖PopupWindow中的EditText

时间:2012-06-03 06:48:26

标签: java android xml android-edittext android-softkeyboard

我把一个简单的测试项目放在一起,显示一个包含EditText的PopupWindow(在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设备上平移,这使得这更加令人困惑。

6 个答案:

答案 0 :(得分:4)

对于将来磕磕绊绊的人,我最后只使用了Dialog而不是PopupWindow,并且使用Dialog平移以保持EditText在2.2中正常工作。

答案 1 :(得分:3)

有更简单的方法。只需为活动键盘提供替代布局。

  1. 左键单击项目选择:“Android工具/新资源文件...”。
  2. 选择布局,给文件名“main”(不要担心冲突)。
  3. 点击“下一步”。然后在左侧列表中选择“键盘”并将其向右移动(单击“ - &gt;”)。
  4. 在右侧选择键盘状态。
  5. 点击完成。
  6. 现在将位于“res / layout”的main.xml的内容复制到res / layout-keyssoft中的新文件中。
  7. 纠正新布局,使得键盘不是那种方式。请记住为这两个布局中的各个组件保持相同的“id”(这就是为什么需要复制粘贴的原因)。
  8. 享受它的运作方式
  9. 了解configuration changes以了解其工作原理。请注意,每次配置更改(方向更改,语言更改,...)都将导致重新创建Activity(在这种情况下onCreate的参数不为null),因此您可以为不同的情况提供不同的布局。

答案 2 :(得分:1)

我怀疑问题是因为在ScrollView中使用了XML

还有另一个与此类似的问题,你可以check all different answers there,也可能适合你。

答案 3 :(得分:1)

更改此

android:windowSoftInputMode="stateUnspecified|adjustPan"

android:windowSoftInputMode="adjustPan"

仅限于您​​的清单文件

答案 4 :(得分:0)

你应该改变

android:windowSoftInputMode="stateUnspecified|adjustPan 

android:windowSoftInputMode="stateHidden|adjustPan"

答案 5 :(得分:0)

花了几个小时才弄清楚,我最终使用了 scrollview

显然,当您使用弹出窗口并且软输入键盘隐藏您的视图时,无法解决此问题。只需进入滚动视图即可。