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


99

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


1
<ScrollView>を削除すると、LinearLayoutが外部レイアウトになるはずです。それは機能します。sofkeyboardがポップアップした場合でも動作します。
Abid A. Chaudhary 2012

1
@pakshaheen scrollviewが必要な場合、問題は修正されません。
Luten、2016

ここに作業コードがあります。stackoverflow.com/questions/7417123/…– 2017
Venkat

回答:


125

私は、以下の属性を定義することによって、問題を修正<activity>するAndroidManifest.xmlを

android:windowSoftInputMode="adjustResize"

12
stateVisibleは必要ありません。これにより、ユーザーがEditTextに集中していない場合でも、アプリの起動時にソフトキーボードが表示されます
RajV

edittextがなくても自動的にキーボードが開く
Mr X

37

わかりました。問題を見つけるために数時間検索しましたが、見つかりました。

以下のような変更のいずれfillViewport="true"かがandroid:windowSoftInputMode="adjustResize"私を助けてくれません。

私はAndroid 4.4を使用していますが、これは大きな間違いです。

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

どういうわけか、フルスクリーンテーマは、SoftKeyboardが表示されているときにScrollViewがスクロールできないようにします。

現時点では、代わりにこれを使用することになりました。

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

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

これが同じ問題を抱えている他の人を助けることを願っています。

編集:私の場合は少し回避策を得たので、ここに投稿しました

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

EDIT2: ここではあなたが正しい方向に行く、あるいはあなたの問題を解決するのに役立ちます別の良い話題です。


+1私の場合、ステータスバーはコードでサードパーティのlibによって隠されていました: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de。

@qweret両方が必要な場合はどうなりますか?全画面表示とスクロール。
Prabs

@Prabs何か解決策を見つけましたか?全画面表示とスクロールの両方も必要です。
ジョニー

@ジョニー・ノープ。今のところ、scrolling3のアクティビティを除いて、アプリ全体でフルスクリーンを使用しています。
Prabs

@Prabs私が考えた唯一の解決策は、透明なステータスバーを持っていることですが、私の場合、API> = 16をサポートしたいので、問題はまだありません。何か考えはありますか?
ジョニー2017年

20

私にとって、機能する唯一のものは、この属性のマニフェストのアクティビティに入れられます:

android:windowSoftInputMode="stateHidden|adjustPan"

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


14

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

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>

1
私はこれを試してみたが、unfrotunately、全く運が...しかし、ルートビューはありませんではないScrollViewが、RelativeLayout含まれてLinearLayout、その後含まれているScrollView
ジェームズ・ヒールド


8

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

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


2

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

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

1

次のコードを使用して問題を解決してみてください。

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

17
ドライピースのコードを回答として投稿するのではなく、コードの機能を説明する必要があります。
エンジェルポリティス2016

0

よく私が試した最も簡単な答えは、アクティビティを全画面表示にするコードを削除することです。このようなコードを使用して、アクティビティを全画面表示にしました。

if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT){

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

私は自分のコードを削除しましたが、完全に正常に動作しますが、フルスクリーンをオンにしてこれを達成したい場合は、他のいくつかの方法を試す必要があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.