ソフトキーボードが表示されている場合、レイアウトによっては一部のアプリケーションでレイアウトが変化することがあります。レイアウト全体(おそらく内部レイアウト)が現在の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. 自動レイアウト調整
- 3. ソフトキーボードが開いたときのレイアウトを表示
- 4. Androidのソフトキーボードが表示されているか非表示になっているときのレイアウトを調整する
- 5. 幅が調整されるときに調整するUIScrollViewの高さ
- 6. ソフトキーボードが来るときのボトムの相対レイアウトを修正する方法は?
- 7. 相対的レイアウトでImageViewをプログラム的に調整できない
- 8. Androidのレイアウトの動的なサイズを調整する
- 9. 反応の調整アルゴリズムの単語調整の意味とは
- 10. サブクラスQFrameがレイアウトに調整されていません
- 11. ソフトキーボードが表示されているときにレイアウトを変更します。
- 12. モバイル基板調整の調整
- 13. プレースホルダコントロールと子コントロールの調整
- 14. データバインディングとフォーカス調整
- 15. 画面幅に固定幅レイアウトを自動調整
- 16. HTMLレイアウトを画面サイズに調整する
- 17. ファイルフォルダー、ローカル/チームファンデーションサーバーを調整することができません。
- 18. アイテムが追加されるとスピナーが下に広がります...レイアウトの調整だけでなく、
- 19. オープンソーシャルガジェット付きの動的高さ調整
- 20. リストビューの幅調整
- 21. Mootoolsのスライダー調整
- 22. 空白の調整
- 23. Androidのレイアウト:TextViewとSpinnerの整列
- 24. matplotlibのylimとxlimの自動調整
- 25. MySQLのパフォーマンスと変数の微調整
- 26. Androidのソフトキーボードが
- 27. htaccess調整が必要
- 28. ポップアップフォームのレイアウトを調整するにはどうすればいいですか?
- 29. html入力と提出の調整
- 30. 物理デバイスとの調整/タップインターフェース通信
キーボードが表示されたとき、あなたのレイアウトがシフトアップあなたの問題ですか? –
質問はそのようにする方法です。 – Eugene
あなたのレイアウトがプルアップしないようにしたいのではないでしょうか? –