RelativeViewにいくつかの要素があり、align bottom属性が設定されています。ソフトキーボードが表示されると、要素はソフトキーボードによって非表示になります。
画面スペースが十分にある場合はキーボードの上に表示されるように上に移動したり、キーボードの上にあるセクションをスクロール可能にしてユーザーが要素を引き続き表示できるようにしたりします。
これにアプローチする方法についてのアイデアはありますか?
RelativeViewにいくつかの要素があり、align bottom属性が設定されています。ソフトキーボードが表示されると、要素はソフトキーボードによって非表示になります。
画面スペースが十分にある場合はキーボードの上に表示されるように上に移動したり、キーボードの上にあるセクションをスクロール可能にしてユーザーが要素を引き続き表示できるようにしたりします。
これにアプローチする方法についてのアイデアはありますか?
回答:
はい、フレームワークがソフトキーボードの表示をどのように処理するかについて説明しているAndroid開発者サイトのこの記事をチェックしてください。
このandroid:windowSoftInputMode
属性を使用して、アクティビティごとに何が行われるかを指定できます。レイアウトのサイズを変更するか、スクロールするかなどです。
アクティビティのAndroidManifest.xmlを追加します。
android:windowSoftInputMode="adjustPan|adjustResize"
マニフェストファイルのアクティビティを次のように変更します
windowSoftInputMode="adjustResize"
または
次のonCreate()
ようにアクティビティクラスのメソッドに変更を加えます
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
内部のスクロールビューで構成されるレイアウトで直面していた同様の問題。EditTextでテキストを選択しようとすると、コピー/カット/貼り付けのアクションバーが下のコードで上に移動するため、レイアウトのサイズが変更されません
android:windowSoftInputMode="adjustPan"
以下のように変更する
1)AndroidManifest.xml
android:windowSoftInputMode="stateVisible|adjustResize"
2)アクティビティスタイルのstyle.xmlファイル
<item name="android:windowActionBarOverlay">true</item>
出来た。!!!!!!!!!!!!
AndroidManifest.xmlで、設定することを忘れないでください:
android:windowSoftInputMode="adjustResize"
ScrollView内のRelativeLayoutの場合は、次のように設定します。
android:layout_gravity="center" or android:layout_gravity="bottom"
大丈夫だよ
oncreateメソッドのアクティビティの場合、行の下に挿入
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
およびonCreateメソッドのフラグメントの場合
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
画面を上にスクロールするには、3つの手順があります。
android:windowSoftInputMode = "adjustResize"
getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:background="@drawable/bg" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_gravity="center" > <TextView /> ......... <TextView /> <EditText > <requestFocus /> </EditText> <Button /> </RelativeLayout> </ScrollView>
PS親の相対レイアウトにandroid:layout_gravity = "center"を追加することを忘れないでください。
私はディエゴ・ラミレスの方法を試しました、それはうまくいきます。AndroidManifestの場合:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
...
</activity>
activity_main.xml内:
<LinearLayout ...
android:orientation="vertical">
<Space
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
<EditText
android:id="@+id/edName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/first_name"
android:inputType="textPersonName" />
<EditText ...>
...
</LinearLayout>
私はそれがあなたのものとかなり同じである私の問題の解決策を見つけました。
まず、LinearLayoutには2つの要素があり、ImageViewとLinearLayoutには2つのEditTextと1つのButtonが含まれているため、キーボードなしでフルスクリーンでそれらを分離しておく必要があり、キーボードが表示されたとき、それらはより近くに見えるはずです。
そこで、0 dpとweight 1の高さ属性を使用してビューを追加しました。これにより、ビューを1つに分離できます。キーボードが表示されるときは、高さが決まっていないため、サイズを変更してアスペクトを維持します。
出来上がり!キーボードの有無にかかわらず、レイアウトのサイズ変更とビュー間の距離は同じです。
ConstraintLayout
、上部セクションを上部に固定し、下部セクションを下部に固定することで、これを簡単な方法で実現できます。キーボードが開くと、中央のスペースを圧迫することで自然にサイズが変更されます(使用する場合adjustResize
)
If user want this task using manifest then add this line in manifest
In manifest add this line: - android:windowSoftInputMode="adjustPan"
e.g.
<activity
android:name=".ui.home.HomeActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">
</activity>
In Java File or Kotlin File(Programically) : - If user want this using Activity then add below line in onCreate Method
activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
ここに完全なマニフェストコードがあります
<activity
android:name=".activities.MainActivity"
android:windowSoftInputMode="adjustResize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
あなたが断片化している場合は、あなたのonCreateに以下のコードを追加する必要があります
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
申し訳ありませんが、これは非常に遅いですが、編集テキストの下にリストビューを追加すると、キーボードがリストビューを移動せずに、その編集テキストの下のすべてのレイアウトを移動することを発見しました
<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"//can make as 1dp
android:layout_below="@+id/et" // set to below editext
android:id="@+id/view"
>
**<any layout**
これは私のために働いた唯一の解決策です。
単一のアドバイスでは私の問題を解決できません。パンの調整は、仕事のサイズ変更の調整とほとんど同じです。レイアウトよりも何も調整を設定しないと、上に移動しませんが、現在書いている最下部の編集テキストが非表示になります。したがって、24時間の継続的な検索の後に、私はこのソースを見つけ、それが私の問題を解決しました。
遅いかもしれませんが、少し追加したいと思います。Android Studioバージョン4.0.1およびGradleバージョン6.1.1では、 windowSoftInputMode
アクティビティに次のフラグを追加している場合、は期待どおりに機能しません。
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
);
多くの時間を浪費した後、私はそのハックを見つけました。ためにはadjustResize
またはAdjustPan
またはのいずれかの属性をwindowSoftInputMode
正しく動作させるには、あなたがあなたの活動からそれを削除する必要があります。