0

我知道在 SO 上有一些关于此的问题,但我还没有找到一个可以解决我的确切问题的问题,我也无法从其他答案中弄清楚。

我有一个带有几个EditText框的布局,其底部相当大,从页面的大约一半一直延伸到底部。当我激活键盘时,此 EditText 会缩小到键盘停止位置的上方。这在具有较大屏幕的设备上不是问题,但在一些较旧的设备上,我可以看到该框几乎不可见。

有没有一种方法可以将我的布局包装成 aScrollView以允许框保持相同的大小,并让用户只需滚动页面即可查看键盘隐藏的任何项目(即,使键盘上方的区域成为“窗口”但在内部保持相同大小的视图)?

我的意思的一个很好的例子是在 HTC 的邮件设置屏幕中,当创建一个新帐户时,您可以滚动屏幕以查看键盘激活时隐藏在键盘后面的内容。可能还有其他人,但我想到了。

这是我页面的 XML,您可以看到它非常简单(我的字符串是占位符,所以没有人指出:P)。

<?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="wrap_content"
android:fillViewport="true" >

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:text="Contact Us"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<View
    android:layout_width="fill_parent"
    android:layout_height="2dp"
    android:layout_alignLeft="@+id/title"
    android:layout_alignRight="@+id/title"
    android:layout_below="@+id/title"
    android:background="#000000" />

<TextView
    android:id="@+id/email"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/title"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="6dp"
    android:text="Your Email:"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/editTextFrom"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_alignLeft="@+id/email"
    android:layout_below="@+id/email"
    android:layout_marginRight="20dp"
    android:layout_marginTop="6dp"
    android:background="@drawable/bordered"
    android:ems="10"
    android:inputType="textPersonName"
    android:paddingLeft="3dp"
    android:paddingRight="3dp" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/subject"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/editTextFrom"
    android:layout_below="@+id/editTextFrom"
    android:layout_marginTop="6dp"
    android:text="Your Subject:"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/editTextSubject"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_alignLeft="@+id/subject"
    android:layout_below="@+id/subject"
    android:layout_marginRight="20dp"
    android:layout_marginTop="6dp"
    android:background="@drawable/bordered"
    android:ems="10"
    android:inputType="textCapSentences"
    android:paddingLeft="3dp"
    android:paddingRight="3dp" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/editTextSubject"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="6dp"
    android:text="Your Message:"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/editTextMessage"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignLeft="@+id/message"
    android:layout_below="@+id/message"
    android:layout_marginRight="20dp"
    android:layout_marginTop="6dp"
    android:layout_marginBottom="10dp"
    android:layout_alignParentBottom="true"
    android:background="@drawable/bordered"
    android:ems="10"
    android:gravity="top|left"
    android:imeOptions="actionDone"
    android:inputType="textCapSentences"
    android:paddingLeft="3dp"
    android:paddingRight="3dp" />

我知道可以对其进行一些编辑AndroidManifest.xml,而且我很确定这是可行的,但我似乎找不到合适的组合!

任何帮助表示赞赏,如果我说得不够清楚,请说。

4

1 回答 1

0

这远远超出了我最初的想法,所以我不会接受这一点,除非没有更好的办法出现。

我现在正在做的是解决这个问题android:windowSoftInputMode="adjustResize",我在AndroidManifest.xml.

我测试了一堆屏幕尺寸,发现 800px 的高度大致是由于键盘而变得有点难以阅读的限制,所以我将以下代码添加到我的onCreateView()

DisplayMetrics screen = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(screen);
if(screen.heightPixels < 800){
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
}

粗略计算出哪个设置可能有更多设备是有意义的(>= 800或者< 800相应地翻转 if 语句,只是为了提高效率(尽管它不会引起注意)。

正如我所说,这是一种解决方法,而不是问题的理想答案,所以请提供更多答案!:)

编辑:没有考虑密度,现在使用if(screen.displayDPI < 160 && screen.heightPixels < 800){

于 2013-06-16T23:45:17.683 回答