Rel*_*mes 9 android android-4.4-kitkat
此问题类似于检查半透明导航是否可用但不完全可用.我有一个使用CyanogenMod 11或Android 4.4等效的Nexus 4,任何使用FLAG_TRANSLUCENT_NAVIGATION以横向模式运行的应用程序都不具备系统UI上的半透明效果,如肖像模式.
同样的问题可以在Nexus 5上重现,因为我没有在横向模式下使用半透明按钮看到为Android 4.4构建的任何谷歌应用程序.
这是我正在使用的代码
int API_LEVEL = android.os.Build.VERSION.SDK_INT;
if (API_LEVEL >= 19)
{
getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION );
}
Run Code Online (Sandbox Code Playgroud)
当窗口表面变大(并且不可用)时,没有半透明性.
所以问题是,我是否必须做任何额外的事情以使其在横向模式下工作?或者这是Android的错误?
我不知道他们是否打算改变这种行为,但这似乎是故意的。自从FLAG_TRANSLUCENT_NAVIGATION
在 Android Kitkat 中引入以来,“手机”大小的设备在横向屏幕右侧始终有一个不透明的黑色导航栏。即使在撰写本文时,Android Lollipop ( FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
) 中也有一个新标志,无论传递给什么,它都具有相同的行为setStatusBarColor())
。
这里有一些粗略的代码,您可以使用它们来了解导航栏样式何时超出您的控制。
class MyActivity extends Activity {
// ...
boolean isNavigationForcedBlack() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return true;
}
final int windowFlags = getWindow().getAttributes().flags;
int navControlFlags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
navControlFlags |= WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
}
if ((windowFlags & navControlFlags) == 0) {
return true;
}
boolean deviceHasOpaqueSideLandscapeNav = getDeviceSmallestWidthDp() < 600;
boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
return deviceHasOpaqueSideLandscapeNav && isLandscape;
}
DisplayMetrics dm = new DisplayMetrics();
float getDeviceSmallestWidthDp() {
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
float widthDp = dm.widthPixels / dm.density;
float heightDp = dm.heightPixels / dm.density;
return Math.min(widthDp, heightDp);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4582 次 |
最近记录: |