web-dev-qa-db-ja.com

Android:windowTranslucentStatus = trueのときにキーボードがEditTextを非表示にする

アプリに新しいAndroid KitKat半透明テーマを適用しており、キーボードが表示されたときに奇妙な問題が発生しています。新しいAndroid:windowTranslucentStatus属性を使用しない場合、すべて通常どおりに機能します。画面のサイズは変更され、すべて表示されたままです。ただし、Android:windowTranslucentStatusを使用している場合、画面のサイズは変更されず、EditTextはキーボードによって非表示になります。

問題のサンプル: http://fewlaps.com/xtra/quitnowStackoverflow.png

画面間の唯一の違いは、スタイルの属性です。

最初の画面:<item name="Android:windowTranslucentStatus">false</item>

2番目の画面:<item name="Android:windowTranslucentStatus">true</item>

これはKitKatリリースのバグであると考えられますが、これを知っておいてください。私たちは少し怒っています。もちろん、誰かが解決策を持っている場合、それは素晴らしいでしょう。

編集:私はこの問題をAndroid Issue Trackerに追加しました。おそらく、問題のスターリングに興味があるでしょう: https://issuetracker.google.com/issues/36986276

32
Roc Boronat

私もこの非常に迷惑な問題に遭遇しました。しかし、最終的に私はこれを機能させました:

<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);

これはうまくいくようですが、確かにかなり気まぐれなようです。とにかく誰かに役立つことを願っています!

8
DanielGrech

セットする Android:windowSoftInputMode="adjustPan" in AndroidManifest.xmlは問題ありません。しかし、私は活動がフルスクリーンのときは機能しないと言いたいだけです、詳しくは Androidを参照してくださいソフトキーボードが表示されているときにフルスクリーンモードでレイアウトを調整する方法

0
leimenghao

回避策は次のとおりです。

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を調整し、移動する位置が見栄えよくなるようにします。

0
bluewhile

これは完璧な解決策ではありませんが、私が見つけた回避策はAndroid:windowSoftInputMode="adjustPan" in AndroidManifest.xml

これは、ウィンドウ全体のサイズを変更するのではなく、キーボードの邪魔にならないようにパンすることに注意してください。

詳細 ここwindowSoftInputModeを検索)。

0
Matt Lyons

あなたの活動の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());
    }

私のために働く:)