弹出softkeyword时如何设置可滚动视图?

时间:2015-05-13 23:42:24

标签: android layout

我需要使用TextView显示一个视图作为字符计数器和两个EditText。一个进入主题,另一个进入消息。

但是当显示键盘时,无法滚动视图。键盘隐藏了视图的下半部分。

我需要在显示键盘时,视图适合剩余空间并允许用户单击并滚动视图,类似于gmail的撰写邮件视图。

这是我的布局,对我来说不起作用:

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

        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar" >
        </include>

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:isScrollContainer="true" >

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

                <android.support.v7.widget.AppCompatTextView
                    android:id="@+id/caracter_counter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:paddingBottom="5dip"
                    android:paddingLeft="5dip"
                    android:paddingRight="5dip"
                    android:paddingTop="10dip"
                    android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                    android:textColor="?android:textColorPrimary" />

                <android.support.v7.widget.AppCompatEditText
                    android:id="@+id/subject"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="25dip"
                    android:hint="Subject"
                    android:inputType="textMultiLine"
                    android:maxLength="@integer/max_length"
                    android:nextFocusDown="@+id/edit_message"
                    android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                    android:textColor="?android:textColorPrimary" />

                <android.support.v7.widget.AppCompatEditText
                    android:id="@+id/message"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:hint="Message"
                    android:inputType="textMultiLine"
                    android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                    android:textColor="?android:textColorPrimary" />
            </LinearLayout>
        </ScrollView>

    </LinearLayout>

我在清单中设置了android:windowSoftInputMode="adjustResize",但它不起作用。

像这样:

enter image description here

修改

我尝试使用此功能,但不能正常工作,软键关键字不会推动滚动视图,第二个编辑文本会被软关键字覆盖。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" >
    </include>

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/toolbar"
        android:fillViewport="true" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:weightSum="3" >

            <android.support.v7.widget.AppCompatTextView
                android:id="@+id/caracter_count"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="end"
                android:layout_weight="0.2"
                android:paddingBottom="5dip"
                android:paddingLeft="5dip"
                android:paddingRight="5dip"
                android:paddingTop="10dip"
                android:text="@string/app_name"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                android:textColor="?android:textColorPrimary" />

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/edit_subject"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="25dip"
                android:layout_weight="0.5"
                android:hint="Subject"
                android:inputType="textMultiLine"
                android:maxLength="@integer/max_length"
                android:nextFocusDown="@+id/edit_message"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                android:textColor="?android:textColorPrimary" />

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/edit_message"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="2.3"
                android:hint="Message"
                android:inputType="textMultiLine"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium"
                android:textColor="?android:textColorPrimary" />
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

得到这个:

enter image description here

我尝试使用清单中android:windowSoftInputMode="stateVisible|adjustResize|adjustPan"的所有组合。

我做错了什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我使用相对布局来修复而不是线性布局,它按预期工作。您可以尝试相对布局。这并不困难,因为这不是一个复杂的布局层次结构。

修改

我尝试了你给定的xml代码。没有对java代码做任何修改。但是删除了组件中的权重。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<!-- replaced your toolbar with a textview just for testing -->

<TextView
    android:id="@+id/toolbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</TextView>

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/toolbar"
    android:fillViewport="true" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <!-- deleted weightsum -->

        <TextView
            android:id="@+id/caracter_count"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:paddingBottom="5dip"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:paddingTop="10dip"
            android:text="@string/app_name"
            android:textColor="?android:textColorPrimary" />
        <!-- deleted weightsum -->

        <EditText
            android:id="@+id/edit_subject"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="25dip"
            android:hint="Subject"
            android:inputType="textMultiLine"
            android:nextFocusDown="@+id/edit_message"
            android:textColor="?android:textColorPrimary" />
        <!-- deleted weightsum -->

        <EditText
            android:id="@+id/edit_message"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="Message"
            android:inputType="textMultiLine"
            android:textColor="?android:textColorPrimary" />
        <!-- deleted weightsum -->
    </LinearLayout>
</ScrollView>

</RelativeLayout>

试试这个。我想这就是你要找的东西。但如果你的要求没问题,你将不得不移除重量。

答案 1 :(得分:0)

很抱歉迟到的回复并抱歉对xml文件进行了硬编码 下面的xml文件对我来说就像一个魅力 试试这个知道

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >

<include
    android:id="@+id/toolbar"
    layout="@layout/custon_action_calander_new_event" >
</include>
<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/toolbar"
    android:fillViewport="true" >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="3" >
        <TextView
            android:id="@+id/caracter_count"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:paddingBottom="5dip"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:paddingTop="10dip"
            android:text="wLHVBSHSD VHHHJBCVJHDBV"
            android:textColor="#000000" />
        <EditText
            android:id="@+id/edit_subject"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="25dip"
            android:layout_weight="0.5"
            android:hint="Subject"
            android:textColor="#000000" />
        <EditText
            android:id="@+id/edit_message"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2.3"
            android:hint="Message"
            android:inputType="textMultiLine"
            android:textColor="#000000" />
    </LinearLayout>
</ScrollView>