linearlayout中的scrollview导致软键盘出现

时间:2015-08-19 20:16:07

标签: android scrollview android-softkeyboard

我有一个包含许多edittext字段的linerlayout。这一切都在纵向模式下正常工作,尤其是软键盘在出现编辑文本字段时才出现。

然而,当设备旋转到横向模式时,底部的几个edittexts从屏幕底部消失,无法访问它们。

解决方案似乎很简单,在最顶层的linearlayout下添加一个scrollview,并创建一个包含所有edittexts的linearlayout。

这解决了滚动问题,但现在第一个edittext会自动获得焦点并弹出软键盘。

我尝试将焦点设置为隐藏的textview并明确隐藏键盘,但没有任何东西阻止键盘显示。

这是(大部分)布局xmal文件: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:orientation="vertical"
    android:showDividers="none"
    android:background="#ffffff"
    android:paddingTop="10dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/scrollView" >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:stretchColumns="*">

...

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Subject"
            android:id="@+id/textView3"
            android:textStyle="bold" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/subject"
            android:editable="false"
            android:ellipsize="end"
            android:singleLine="true"
            android:textStyle="bold"
            android:inputType="textCapWords"
            android:background="@drawable/apptheme_edit_text_holo_light" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Event Text"
            android:id="@+id/textView4"
            android:textStyle="bold" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine|textCapSentences"
            android:id="@+id/text"
            android:linksClickable="false"
            android:enabled="true"
            android:editable="true"
            android:capitalize="sentences"
            android:nestedScrollingEnabled="true"
            android:minLines="3"
            android:gravity="top"
            android:background="@drawable/apptheme_edit_text_holo_light" />

...

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Additional Comments"
            android:id="@+id/textView6"
            android:textStyle="bold" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine|textCapSentences"
            android:id="@+id/comments"
            android:minLines="3"
            android:gravity="top"
            android:editable="true"
            android:nestedScrollingEnabled="true"
            android:textAlignment="gravity"
            android:background="@drawable/apptheme_edit_text_holo_light" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/id"
            android:visibility="gone" />
    </LinearLayout>
</ScrollView>

任何人都可以告诉我我做错了什么,或者在点击编辑文本之前如何压制键盘。

非常感谢

3 个答案:

答案 0 :(得分:3)

在您遇到问题的活动代码(Android Manifest)中添加此内容:

android:windowSoftInputMode="stateHidden"

你可以这样编程:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

答案 1 :(得分:0)

将这些属性设置为ScrollView:

public enum CRC4_POLY
{
    CRC4 = 0x0B //1011
};

public class CRC4Calc
{
    private byte[] table = new byte[16];

    public byte Checksum(params byte[] val)
    {
        if (val == null)
            throw new ArgumentNullException("val");

        byte c = 0;

        foreach (byte b in val)
        {
            c = table[c ^ b];
        }

        return c;
    }

    public byte[] Table
    {
        get
        {
            return this.table;
        }
        set
        {
            this.table = value;
        }
    }

    public byte[] GenerateTable(CRC4_POLY polynomial)
    {
        byte[] csTable = new byte[16];

        for (int i = 0; i < 16; ++i)
        {
            int curr = i;

            for (int j = 0; j < 4; ++j)
            {
                if ((curr & 0x8) != 0)
                {
                    curr = ((curr << 1) & 0x0F) ^ (int)polynomial; // why not?: curr = ((curr ^ (int)polynomial) <<1) & 0x0F;
                }
                else
                {
                    curr <<= 1;
                }
            }

            csTable[i] = (byte)curr;
        }

        return csTable;
    }

    public CRC4Calc(CRC4_POLY polynomial)
    {
        this.table = this.GenerateTable(polynomial);
    }
}

答案 2 :(得分:0)

你是否尝试过你的Manifest活动:

     <activity
        android:name=".YourActivity"
        android:configChanges="orientation"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="landscape"
        android:windowSoftInputMode="stateHidden|adjustResize" >
    </activity>