web-dev-qa-db-ja.com

ソフトキーボードがポップアップしたときのページスクロール

<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>

上記のように、単純なレイアウトは3つの入力フィールドと「OK」ボタンで構成されています。

上記のレイアウトでアプリを実行します。最初の入力フィールド(@+id/input_one)をタップすると、画面の下部からソフトキーボードがポップアップします非表示 3番目の入力フィールドと「OK」ボタン。

<ScrollView>を使用しているので、ソフトキーボードでhiddenである3番目の入力フィールドと[OK]ボタンを表示するためにページを上にスクロールできると思いましたbutページはスクロールできません。どうして?それを取り除く方法は? 基本的に、すべての入力フィールドと、[OK]ボタンがソフトキーボードがポップアップした場合でも表示したいと思います。

88
Leem.fin

AndroidManifest.xml<activity>で次の属性を定義することで問題を修正しました

Android:windowSoftInputMode="stateVisible|adjustResize"
114
Leem.fin

わかりました、私は問題を見つけるために今数時間検索しました、そして私はそれを見つけました。

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

時間とバッテリー表示でトップシステムバーを取り除く方法がわかりませんが、少なくとも問題はありました。

これが同じ問題を抱えている他の人に役立つことを願っています。

EDIT:私の場合は少しの回避策がありましたので、投稿しました here

これがあなたのために働くかどうかはわかりませんが、それは間違いなくあなたを理解し、いくつかのことを明確にするのに役立ちます。

EDIT2:ここ は、正しい方向に進み、問題を解決するのに役立つ別の優れたトピックです。

36
qweret

私にとって有効なのは、この属性のマニフェストのアクティビティに入れることだけです。

Android:windowSoftInputMode="stateHidden|adjustPan"

アクティビティを開くときにキーボードを表示せず、ビューの下部に重ならないようにします。

これをマニフェスト内にフルスクリーンモードなしで配置します

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>
12
user3594530

Manifestで定義windowSoftInputModeプロパティ<activity Android:name=".MyActivity" Android:windowSoftInputMode="adjustNothing">

11
Mohammad Ersan

アクティビティタグの下のAndroidマニフェストファイルに以下のコード行を追加します

Android:windowSoftInputMode="adjustResize"
7
Bilal Ahmad

これをチェックしてください。

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

これは私のためだけに働いた:

Android:windowSoftInputMode="adjustPan"
3
blueware

次のコードを使用して問題を解決できます。

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

また、プログラムでそれを行う場合は、アクティビティのonCreateに次の行を追加するだけです。

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