碎片和软键盘布局问题
Fragments and soft keyboard layout issue
我有一个带有 ScrollView 和 Button 的片段。 ScrollView 包含一些 TextView 和 EditView 的 LinearLayout。当显示软键盘时,我希望按钮保留在底部,就像我对应用程序的活动所做的那样,但它会随着键盘不断上升。我读过 ScrollView 可能对这种行为负责,但没有它,将无法访问底部的 EditViews。
android:isScrollContainer="false"
也无济于事,向 ScrollView 添加 android:layout_above="@+id/button_bar"
不适用于 Fragments(为什么,我不知道)。有什么想法吗?
XML布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="fragment.ProfileFragment">
<ScrollView
android:id="@+id/scroll_profile"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:fadingEdge="none"
android:scrollbars="none"
android:isScrollContainer="false" >
<RelativeLayout
android:id="@+id/layout_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:orientation="vertical"
android:padding="0dp">
<TextView
android:id="@+id/text_first_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/first_name"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_first_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionNext"
android:lines="1"
android:padding="5dp"
android:inputType="text" />
<TextView
android:id="@+id/text_last_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/last_name"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_last_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionNext"
android:lines="1"
android:padding="5dp"
android:inputType="text" />
<TextView
android:id="@+id/text_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/phone_number"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_phone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionNext"
android:lines="1"
android:inputType="phone"
android:padding="5dp" />
<TextView
android:id="@+id/text_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/email"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionDone"
android:lines="1"
android:padding="5dp"
android:inputType="textEmailAddress" />
<TextView
android:id="@+id/text_help"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/show_help_texts"
android:textStyle="bold" />
<CheckBox
android:id="@+id/check_help"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:lines="1"
android:padding="5dp" />
<TextView
android:id="@+id/text_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginTop="20dp"
android:text="@string/employee_code"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_code"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="@string/employee_code_hint"
android:imeOptions="actionDone"
android:lines="1"
android:padding="5dp"
android:inputType="textPassword" />
</RelativeLayout>
</ScrollView>
<LinearLayout
android:id="@+id/button_bar"
style="?android:attr/buttonBarStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/button_bar"
android:layout_gravity="bottom"
android:layout_marginTop="@dimen/activity_vertical_margin">
<Button
style="?android:attr/buttonBarButtonStyle"
android:id="@+id/button_save"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button_save"
android:textColor="@android:color/primary_text_dark" />
</LinearLayout>
</FrameLayout>
您是否尝试在您的清单中为您的 activity 元素使用 android:windowSoftInputMode="adjustPan"
?我认为它可以帮助。
如果您想将按钮保留在 ScrollView 下方,我还建议您将 FrameLayout 替换为垂直 LinearLayout。
我有一个带有 ScrollView 和 Button 的片段。 ScrollView 包含一些 TextView 和 EditView 的 LinearLayout。当显示软键盘时,我希望按钮保留在底部,就像我对应用程序的活动所做的那样,但它会随着键盘不断上升。我读过 ScrollView 可能对这种行为负责,但没有它,将无法访问底部的 EditViews。
android:isScrollContainer="false"
也无济于事,向 ScrollView 添加 android:layout_above="@+id/button_bar"
不适用于 Fragments(为什么,我不知道)。有什么想法吗?
XML布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="fragment.ProfileFragment">
<ScrollView
android:id="@+id/scroll_profile"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:fadingEdge="none"
android:scrollbars="none"
android:isScrollContainer="false" >
<RelativeLayout
android:id="@+id/layout_profile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:orientation="vertical"
android:padding="0dp">
<TextView
android:id="@+id/text_first_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/first_name"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_first_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionNext"
android:lines="1"
android:padding="5dp"
android:inputType="text" />
<TextView
android:id="@+id/text_last_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/last_name"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_last_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionNext"
android:lines="1"
android:padding="5dp"
android:inputType="text" />
<TextView
android:id="@+id/text_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/phone_number"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_phone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionNext"
android:lines="1"
android:inputType="phone"
android:padding="5dp" />
<TextView
android:id="@+id/text_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/email"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:imeOptions="actionDone"
android:lines="1"
android:padding="5dp"
android:inputType="textEmailAddress" />
<TextView
android:id="@+id/text_help"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/show_help_texts"
android:textStyle="bold" />
<CheckBox
android:id="@+id/check_help"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:lines="1"
android:padding="5dp" />
<TextView
android:id="@+id/text_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginTop="20dp"
android:text="@string/employee_code"
android:textStyle="bold" />
<EditText
android:id="@+id/edit_code"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="@string/employee_code_hint"
android:imeOptions="actionDone"
android:lines="1"
android:padding="5dp"
android:inputType="textPassword" />
</RelativeLayout>
</ScrollView>
<LinearLayout
android:id="@+id/button_bar"
style="?android:attr/buttonBarStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/button_bar"
android:layout_gravity="bottom"
android:layout_marginTop="@dimen/activity_vertical_margin">
<Button
style="?android:attr/buttonBarButtonStyle"
android:id="@+id/button_save"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/button_save"
android:textColor="@android:color/primary_text_dark" />
</LinearLayout>
</FrameLayout>
您是否尝试在您的清单中为您的 activity 元素使用 android:windowSoftInputMode="adjustPan"
?我认为它可以帮助。
如果您想将按钮保留在 ScrollView 下方,我还建议您将 FrameLayout 替换为垂直 LinearLayout。