弹出软键盘时页面滚动

时间:2012-04-03 07:44:47

标签: android android-layout android-intent android-scrollview android-keypad

我有<ScrollView>布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

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

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

如上所示,简单布局包含三个输入字段和一个“确定”按钮。

我使用上面的布局运行我的应用程序,当我点击第一个输入字段(@+id/input_one)时,软键盘将从屏幕底部弹出,隐藏第3个输入字段和“确定”按钮。

由于我使用<ScrollView>,我认为我可以向上滚动页面以查看软键盘隐藏的第3个输入字段和“确定”按钮,但页面不可滚动。为什么?如何摆脱它? 基本上,我希望看到每个输入字段和“确定”按钮,甚至弹出软键盘。

11 个答案:

答案 0 :(得分:111)

我通过在 AndroidManifest.xml

<activity>中定义以下属性来解决问题
android:windowSoftInputMode="stateVisible|adjustResize"

答案 1 :(得分:36)

好的,我现在已经搜索了几个小时来找到问题,我找到了它。

fillViewport="true"android:windowSoftInputMode="adjustResize"等所有变化都没有帮助我。

我使用Android 4.4,这是大错误

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

不知何故,当SoftKeyboard可见时,全屏主题会阻止ScrollViews滚动。

目前,我最终使用了这个:

android:theme="@android:style/Theme.Black.NoTitleBar

我不知道如何摆脱顶级系统栏的时间和电池显示,但至少我遇到了问题。

希望这可以帮助那些遇到同样问题的人。

编辑:我的案例有一些解决方法,所以我发布了here

我不确定这是否对您有用,但它肯定会帮助您理解并澄清一些事情。

EDIT2: Here是另一个很好的主题,它可以帮助您朝着正确的方向前进,甚至可以解决您的问题。

答案 2 :(得分:15)

对我来说,唯一可行的是将该属性放入清单中的活动:

android:windowSoftInputMode="stateHidden|adjustPan"

打开活动时不显示键盘,并且不与视图底部重叠。

答案 3 :(得分:11)

在您的Manifest定义windowSoftInputMode媒体资源中 <activity android:name=".MyActivity" android:windowSoftInputMode="adjustNothing">

答案 4 :(得分:9)

在无全屏模式

中将此内容放入您的Manifest中
android:windowSoftInputMode="stateVisible|adjustPan" 
你的清单中的

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

答案 5 :(得分:7)

在活动代码

下的Android Manifest文件中添加以下代码行
ORDER BY

答案 6 :(得分:4)

看看这个。

<activity android:name=".Calculator" android:windowSoftInputMode="stateHidden|adjustResize" android:theme="@android:style/Theme.Black.NoTitleBar"></activity>

答案 7 :(得分:2)

这对我有用:

android:windowSoftInputMode="adjustPan"

答案 8 :(得分:0)

您可以尝试使用以下代码来解决问题:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

答案 9 :(得分:0)

如果您要以编程方式执行此操作,只需将以下行添加到活动的onCreate中即可。

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );

答案 10 :(得分:0)

我尝试过的最简单的答案就是删除您的代码,使活动全屏显示。我有一个类似的代码,它使我的活动全屏显示:

如果(Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT){

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

我刚刚删除了我的代码,它可以正常工作,尽管如果您想在全屏模式下实现此目的,则必须尝试其他方法