ソフトキーボードが表示されている場合、レイアウトによっては一部のアプリケーションでレイアウトが変化することがあります。レイアウト全体(おそらく内部レイアウト)が現在のEditText
だけでなく、シフトするため、これは確かにadjustPan
ではありません。これは、例えばEvernoteのログイン画面にあります。これはどうやって助言できますか?ソフトキーボードがオンのときのレイアウトを調整
答えて
ここでEvernoteのログイン画面のように機能するソリューションです:
まず、このようなあなたの特別のLinearLayoutになりますクラスを定義します。
public class MyLayout extends LinearLayout {
public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyLayout(Context context) {
super(context);
}
private OnSoftKeyboardListener onSoftKeyboardListener;
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
if (onSoftKeyboardListener != null) {
final int newSpec = MeasureSpec.getSize(heightMeasureSpec);
final int oldSpec = getMeasuredHeight();
if (oldSpec > newSpec){
onSoftKeyboardListener.onShown();
} else {
onSoftKeyboardListener.onHidden();
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public final void setOnSoftKeyboardListener(final OnSoftKeyboardListener listener) {
this.onSoftKeyboardListener = listener;
}
public interface OnSoftKeyboardListener {
public void onShown();
public void onHidden();
}
}
このレイアウトは変化を測定するために聞き、新しい場合測定値は古いものよりも<です。つまり、画面の一部がソフトキーボードで食べられます。
マニフェストで動作させるには、android:windowSoftInputMode="adjustResize"
を設定する必要がありますが、コンテンツのサイズが変更され、シフトされるだけではありません。
、システム全体は以下のように動作します あなたのレイアウトを持っている:
<MyLayout id="layout">
<SomeImage id="image"/>
<SomeText>
<SomeInput>
</MyLayout>
それは画面ログインevernotesようなものです。 はその後、自分の活動に:
((MyLayout)findViewById(R.id.layout)).setOnSoftKeyboardListener(new OnSoftKeyboardListener() {
@Override
public void onShown() {
findViewById(R.id.image).setVisibility(View.GONE);
}
@Override
public void onHidden() {
findViewById(R.id.image).setVisibility(View.VISIBLE);
}
});
は、その後のmanifest.xmlに行くと設定
android:windowSoftInputMode="adjustResize"
、ソフトキーボードが表示されたとき、それが画像を隠しますし、サイズが変更されますでどうなりますか残りのコンテンツ(あなたは実際にEvernoteでテキストのサイズを変更する方法を見ることができます)
画像の隠蔽は、もちろんあなたができる多くのことの一つです。しかし、異なるレイアウトの変更もonMeasureを呼び出すので注意する必要があります。
もちろん、それは汚れた変形です。オリエンテーションの変更、実際に測定を行うときの正しい時間、新しいスペックと古いスペックを比較するときにはもっと論理があるかどうかを確認する必要があります。しかし、私はこれを行う唯一の方法だと思います。
私たちのプロジェクトでも同じアプローチを採用しています。それは嫌いですが、Android 2.xでIMEの表示/非表示のイベントをフックする唯一の方法だと思われます。 – Michael
これにはいくつかのバグがあることがあります。このバージョンの方が良いです:http://stackoverflow.com/questions/2150078/android-is-software-keyboard-shown/4737265#4737265 –
Galaxy S4では正しく動作しません。 if(oldSpec> newSpec)でelseを置き換えるにはif(oldSpec> newSpec).. else ...を変更する必要があります。現在のコードは、測定値が同じ場合にonHidden()を発生させます。 –
は、それはあなたのお役に立てば幸いです:
http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html
http://davidwparker.com/2011/08/30/android-how-to-float-a-row-above-keyboard/
2番目のリンクは非常に役に立ちました。 –
これはこれはあなたのOnCreate
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
使用"adjustResize"代わりのあるme..Putのために働いていましたAndroidManifest.xmlの "adjustPan"documentationから
<activity
...
android:windowSoftInputMode="adjustResize" />
:
"adjustResize"
活動のメインウィンドウが常に画面上のソフトキーボードのための部屋を作るためにリサイズされます。「adjustPan」
活動のメインウィンドウは、ソフトキーボード用のスペースを確保するためにリサイズされていません。むしろ、ウィンドウの内容は自動的にパンされ、現在のフォーカスがキーボードによって隠されることはなく、ユーザーはいつも入力しているものを見ることができます。これは、ウィンドウの不明瞭な部分に到達して対話するためにソフトキーボードを閉じる必要があるため、一般的にはサイズ変更よりも望ましくありません。
親の中のレイアウトにスクロールビューを使用し、マニフェストファイルからadjustpanまたはadjustresize設定を削除します。 レイアウトのScrollViewは、指定されたレイアウトでパンやレイアウトをスクロールする自由な機能を提供し、レイアウトを保護してツールバーやアクションバーをオーバーライドし、レイアウト内のボタンやテキストフィールドも非表示にします。基本レイアウト内でScrollViewを使用する必要があることを忘れないでください。このスクロールビューは、画面全体の基本レイアウトとして機能します。 例
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:scrollbarStyle="insideInset"
android:scrollbars="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- Add here which you want -->
</LinearLayout>
</ScrollView>
選択答えは、フルスクリーンモードでは動作しません。 続いて一行ソリューションは、私の仕事:
AndroidBug5497Workaround.assistActivity(this);
は、クラスをコピーAndroidBug5497Workaroundから:
Android How to adjust layout in Full Screen Mode when softkeyboard is visible
ありがとうございました。私の場合は、レイアウトが複雑すぎて、アクティビティ内でキーボードが表示されたときに何らかの配置が行われた後に、メモリ不足でクラッシュする可能性があります。 – CoolMind
- 1. ソフトキーボードがオンになっているときのレイアウトを調整します
- 2. Android-変更ソフトキーボードがオンのときのEditTextの高さ
- 3. ソフトキーボードがオンのときにDialogFragmentが表示されない
- 4. 自動レイアウト調整
- 5. ソフトキーボードが開いたときのレイアウトを表示
- 6. ソフトキーボードのレイアウトを上書きする
- 7. レイアウト内のウィジェットを調整する
- 8. Androidスタジオ2.3.1のConstraintLayoutのレイアウト調整センター
- 9. AdMobバナーが表示されるときのレイアウトを調整する
- 10. Androidスタジオのレイアウト自動調整
- 11. Androidのソフトキーボードが表示されているか非表示になっているときのレイアウトを調整する
- 12. ソフトキーボードが来るときのボトムの相対レイアウトを修正する方法は?
- 13. ソフトキーボードが表示されているときにフラグメントを調整し、アクティビティを安定させる
- 14. 幅が調整されるときに調整するUIScrollViewの高さ
- 15. 相対的レイアウトでImageViewをプログラム的に調整できない
- 16. d3.jsの力指向のレイアウトの矢頭の大きさを調整する
- 17. 自動レイアウトとスタックビューを自動調整できない(Swift 3、Xcode 8)
- 18. Androidのレイアウトの動的なサイズを調整する
- 19. ソフトキーボードが表示されているときにレイアウトを変更します。
- 20. 反応の調整アルゴリズムの単語調整の意味とは
- 21. レイアウトの水平ビューを調整する方法
- 22. UITableViewCell内の自動レイアウトを調整する
- 23. QVBoxLayoutでレイアウト間のスペースを調整する方法
- 24. ソフトキーボードがオンのときに上部に半分のダイアログが表示されない
- 25. サブクラスQFrameがレイアウトに調整されていません
- 26. 自動レイアウトを使用して画面が変更されたときにカスタムセルのUIButtonフォントを調整する
- 27. %を調整するとdivの高さが調整されませんか?
- 28. ソフトキーボードが画面に表示されたら、アンドロイドのレイアウトを調整する際に問題が発生します
- 29. リンゴのレビューボードがボリュームと明るさの調整を調整できるかどうかは?
- 30. モバイル基板調整の調整
キーボードが表示されたとき、あなたのレイアウトがシフトアップあなたの問題ですか? –
質問はそのようにする方法です。 – Eugene
あなたのレイアウトがプルアップしないようにしたいのではないでしょうか? –