アプリに新しいAndroid KitKat半透明テーマを適用しており、キーボードが表示されたときに奇妙な問題が発生しています。新しいAndroid:windowTranslucentStatus
属性を使用しない場合、すべて通常どおりに機能します。画面のサイズは変更され、すべて表示されたままです。ただし、Android:windowTranslucentStatus
を使用している場合、画面のサイズは変更されず、EditText
はキーボードによって非表示になります。
問題のサンプル:
画面間の唯一の違いは、スタイルの属性です。
最初の画面:<item name="Android:windowTranslucentStatus">false</item>
2番目の画面:<item name="Android:windowTranslucentStatus">true</item>
これはKitKatリリースのバグであると考えられますが、これを知っておいてください。私たちは少し怒っています。もちろん、誰かが解決策を持っている場合、それは素晴らしいでしょう。
編集:私はこの問題をAndroid Issue Trackerに追加しました。おそらく、問題のスターリングに興味があるでしょう: https://issuetracker.google.com/issues/36986276
私もこの非常に迷惑な問題に遭遇しました。しかし、最終的に私はこれを機能させました:
<style name="Theme.MyApp">
<item name="Android:windowTranslucentStatus">true</item>
</style>
テーマにfitSystemWindows = "true"を設定する代わりに、レイアウトのルートビューに設定します。
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fitsSystemWindows="true"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</FrameLayout>
私は私の活動でも素晴らしい SystemBarTintManager を使用しています:
new SystemBarTintManager(this).setStatusBarTintEnabled(true);
これはうまくいくようですが、確かにかなり気まぐれなようです。とにかく誰かに役立つことを願っています!
セットする Android:windowSoftInputMode="adjustPan"
in AndroidManifest.xml
は問題ありません。しかし、私は活動がフルスクリーンのときは機能しないと言いたいだけです、詳しくは Androidを参照してくださいソフトキーボードが表示されているときにフルスクリーンモードでレイアウトを調整する方法
回避策は次のとおりです。
TouchまたはFocusまたはClickListenerを追加し、EditText保持レイアウトを画面の半分まで上に移動します。ただし、これは実際に機能する方法ではないため、指を交差させて、Googleが修正することを期待してください。
EditText e = new EditText(this);
e.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
v.animate().x(screenHeight/2f).start();
else
v.animate().x(screenHeight).start();
}
});
保持レイアウトにvを調整し、移動する位置が見栄えよくなるようにします。
これは完璧な解決策ではありませんが、私が見つけた回避策はAndroid:windowSoftInputMode="adjustPan"
in AndroidManifest.xml
。
これは、ウィンドウ全体のサイズを変更するのではなく、キーボードの邪魔にならないようにパンすることに注意してください。
詳細 ここ (windowSoftInputMode
を検索)。
あなたの活動のoncreateの後にこれを行の下に置きます
int currentapiVersion = Android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= Android.os.Build.VERSION_CODES.Lollipop) {
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(mCategoryColors.getColorStatusBar());
}
私のために働く:)