我们在我们的应用程序中应用了新的Android KitKat半透明主题,当键盘出现时我们遇到了一个奇怪的问题。如果我们不使用新的android:windowTranslucentStatus
属性,则所有操作都正常:屏幕调整大小,并且所有屏幕都保持可见。但是当我们使用android:windowTranslucentStatus
时,屏幕不会调整大小,我们的EditText
会被键盘隐藏。
问题的一个示例:
屏幕之间的唯一区别在于样式中的属性:
第一个屏幕:
<item name="android:windowTranslucentStatus">false</item>
第二个屏幕:
<item name="android:windowTranslucentStatus">true</item>
我们认为这是Kitkat发布的错误,但我们希望您了解这一点。我们有点生气了。当然,如果有人有解决方案,那将是惊人的。
编辑:我刚刚将这个问题添加到Android问题跟踪器中。您可能有兴趣主演这个问题:https://issuetracker.google.com/issues/36986276
答案 0 :(得分:8)
我也遇到了这个非常烦人的问题。但最终我得到了这个工作:
<style name="Theme.MyApp">
<item name="android:windowTranslucentStatus">true</item>
</style>
而不是设置fitSystemWindows =&#34; true&#34;在主题中,我将其设置在我的布局的根视图上。
<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);
这似乎运作良好,但诚然看起来相当善变。希望它能帮到某人!
答案 1 :(得分: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调整到您的控制布局,并确保您移动的位置看起来不错。
答案 2 :(得分:0)
在你的活动中创建
之后将这些行放在下面let rec iterate f value = seq {
yield value
yield! iterate f (f value) }
为我工作:)
答案 3 :(得分:0)
这不是一个完美的解决方案,但我找到的解决方法是在android:windowSoftInputMode="adjustPan"
中设置AndroidManifest.xml
。
请注意,这会将整个窗口平移到键盘之外,而不是调整其大小。
更多信息here(搜索windowSoftInputMode
)。
答案 4 :(得分:0)
在android:windowSoftInputMode="adjustPan"
中设置AndroidManifest.xml
即可。但我只想说活动是FullScreen时不起作用,有关详细信息,请参阅Android How to adjust layout in Full Screen Mode when softkeyboard is visible
答案 5 :(得分:-1)
还添加以下内容
<item name="android:fitsSystemWindows">true</item>