当键盘出现时如何使Android视图可滚动?

16

我有一个包含一些字段的视图(姓名、电子邮件、密码、注册按钮):

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ViewFlipper
        android:id="@+id/viewflipper"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        //Layouts

    </ViewFlipper>

</ScrollView>

当我聚焦一个edittext字段时,键盘会出现并覆盖视图中的下方字段。因此当键盘存在时,我无法看到它们。我想知道如何使视图可滚动,以便我可以看到下面的字段。另外,如何使视图自动滚动以使聚焦的字段可见。

4个回答

45

你需要在AndroidManifest.xml文件中的activity中包含android: windowSoftInputMode="adjustResize"属性,然后Android会自动为你调整大小:

<activity android:name="..."
          ...
          android:windowSoftInputMode="adjustResize">
    ...
/>

1
实际上它被设置为“adjustPan | adjustResize”。移除adjustPan使其正常工作。谢谢! - Alexis

7
我已经创建了一个简单的xml文件。 步骤1。当键盘出现时,您可以滚动。 步骤2。当您点击文本框时,它会在键盘上方获得焦点。
<ScrollView android:id="@+id/ScrollView01"
xmlns:android="http://schemas.android.com/apk/res/android"
android:fillViewport="true" 
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout 
    android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:weightSum="1.0" 
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true" 
    android:id="@+id/l_layout">
    <EditText 
        android:layout_height="wrap_content" 
        android:layout_width="match_parent" 
        android:id="@+id/editText1" 
        android:layout_marginTop="100dp">
        <requestFocus></requestFocus>
    </EditText>
    <EditText 
        android:layout_height="wrap_content" 
        android:layout_width="match_parent" 
        android:id="@+id/editText2" 
        android:layout_marginTop="100dp">
        </EditText>
    </LinearLayout> 
</ScrollView>

我遇到了一个ScrollView的问题,fillViewport正是我所需要的。 - AlexBrand

0
在我的情况下,@Aleks G提供的解决方案没有起作用。所以我通过...来解决了我的问题。
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/registration_scroll_view"
    android:layout_alignParentTop="true"
    android:layout_above="@+id/btn_register_submit"
    >

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

       <!--This comment will be replaced 
           by your focusable views-->

    </LinearLayout>
</ScrollView>

<Button
    android:id="@+id/btn_register_submit"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:background="@drawable/form_action_button_green"
    android:gravity="center"
    android:text="@string/submit"
    />

</RelativeLayout>

0
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ViewFlipper
    android:id="@+id/viewflipper"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
    <ScrollView 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/scroll_container">
        //Layouts
    </ScrollView>
    

</ViewFlipper>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接