TextEditをタップした時にPortraitでも全画面で入力したい
先に言っておくとあまりいい方法は見つかりませんでした。
やりたいこと
タイトルの通り。Landscapeの場合は全画面入力になるので、Portraitでも同じような挙動にしたい
もっと具体的に言うと、Portrait固定かつ画面下部固定で置いているEditTextをタップした場合、
android:windowSoftInputMode="adjustPan"
とか指定するとキーボードに隠れるってことはないんだけどテキストエリアが狭すぎて入力しにくい。
できればお手軽に上記のようはattributeを指定するだけで全画面入力したい。
Landscapeだと全画面で入力できる仕組み
さっそくFrameworkのコードを読んでみましょう。
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java#992
992 /** 993 * Override this to control when the input method should run in 994 * fullscreen mode. The default implementation runs in fullsceen only 995 * when the screen is in landscape mode. If you change what 996 * this returns, you will need to call {@link #updateFullscreenMode()} 997 * yourself whenever the returned value may have changed to have it 998 * re-evaluated and applied. 999 */ 1000 public boolean onEvaluateFullscreenMode() { 1001 Configuration config = getResources().getConfiguration(); 1002 if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) { 1003 return false; 1004 } 1005 if (mInputEditorInfo != null 1006 && (mInputEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_FULLSCREEN) != 0) { 1007 return false; 1008 } 1009 return true; 1010 }
残念ながらPortraitの場合はメソッドの頭でreturnされます。
このクラスはInputMethodServiceなので、独自で拡張クラス作れなくはないですが、
ユーザさんにそのIMEを選択してもらう必要があるので本来のやりたいこととは離れてしまいます。
結論
EditTextを全画面に配置する別Fragmentを用意するのが正攻法かなぁ