33

我们在我们的应用程序中应用了新的 Android KitKat 半透明主题,当键盘出现时我们遇到了一个奇怪的问题。如果我们不使用新android:windowTranslucentStatus属性,一切照常工作:屏幕被调整大小,一切都保持可见。但是当我们使用 时android:windowTranslucentStatus,屏幕不会调整大小,我们EditText会被键盘隐藏。

问题示例: http://fewlaps.com/xtra/quitnowStackoverflow.png

屏幕之间的唯一区别在于样式中的属性:

第一个画面: <item name="android:windowTranslucentStatus">false</item>

第二屏: <item name="android:windowTranslucentStatus">true</item>

我们认为这是 Kitkat 版本中的一个错误,但我们希望您注意这一点。我们有点生气了。当然,如果有人有解决方案,那就太棒了。

编辑:我刚刚将此问题添加到 Android 问题跟踪器。可能你会对这个问题感兴趣:https ://issuetracker.google.com/issues/36986276

4

6 回答 6

7

我也遇到了这个非常烦人的问题。但最终我得到了这个工作:

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

这似乎运作良好,但无可否认,这似乎很善变。希望它对某人有帮助!

于 2014-01-20T22:35:56.947 回答
0

一种解决方法是:

添加一个 Touch 或 Focus 或 ClickListener 并将 EditText 保持布局向上移动到屏幕的一半。然而,这确实不是它应该工作的方式,所以请保持手指交叉,并希望谷歌能修复它。

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 调整为您的控股布局,并确保您移动的位置看起来不错。

于 2013-11-11T02:30:08.627 回答
0

这不是一个完美的解决方案,但我发现的一种解决方法是设置android:windowSoftInputMode="adjustPan".AndroidManifest.xml

请注意,这会将整个窗口平移到键盘之外,而不是调整它的大小。

更多信息在这里(搜索windowSoftInputMode)。

于 2016-01-11T04:31:52.933 回答
0

设置好android:windowSoftInputMode="adjustPan"AndroidManifest.xml但我只想说,当活动为全屏时它不起作用,有关更多详细信息,请参阅Android 如何在软键盘可见时在全屏模式下调整布局

于 2018-01-23T04:32:27.697 回答
0

在您的活动中的 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());
    }

为我工作:)

于 2015-09-24T09:04:33.490 回答
-1

也添加以下内容

<item name="android:fitsSystemWindows">true</item>
于 2014-01-20T22:02:36.680 回答