Android 在全屏模式下,在平板电脑上重复调暗状态栏(系统\用户界面\标志\低姿态)?
我知道如何在Android平板电脑上调暗状态栏。我使用该代码执行此操作:Android 在全屏模式下,在平板电脑上重复调暗状态栏(系统\用户界面\标志\低姿态)?,android,user-interface,tablet,statusbar,Android,User Interface,Tablet,Statusbar,我知道如何在Android平板电脑上调暗状态栏。我使用该代码执行此操作: getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); 它工作正常,但只工作一次。当我触摸状态栏时,它会激活,之后我回到应用程序的活动中时,状态栏仍会激活(用图标代替点)。我尝试登录Resume调用,但它没有被调用,所以我再次搜索并找到了另一个解决方案-使用处理程序更改状态栏的可见性: getWindow().g
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
它工作正常,但只工作一次。当我触摸状态栏时,它会激活,之后我回到应用程序的活动中时,状态栏仍会激活(用图标代替点)。我尝试登录Resume调用,但它没有被调用,所以我再次搜索并找到了另一个解决方案-使用处理程序更改状态栏的可见性:
getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
});
它有时能工作,但几次尝试后就坏了
我需要这个游戏-理论上,我可以尝试在每次触摸后或每次在主循环中调用它,但这似乎是个坏主意(此外,它必须从特定线程调用-只有创建视图层次结构的原始线程才能触摸其视图)
我的问题是:实现状态栏自动调暗的最佳方式是什么?或者,在我的情况下,任何方式。我也遇到过这个问题(除了隐藏导航标志),谷歌似乎天生就禁用了不断隐藏/调暗系统栏的功能。我同意你的观点,不断调用该方法可能会在线程上失败或导致性能问题,特别是考虑到移动设备上发生了如此多的ontouch事件
归根结底,我认为没有解决方案,除非用户将其设备根化以永久删除系统栏。解决方案是在根视图上拥有一个视图。onsystemivilitychangelister 当事件触发时,您必须等待一段时间才能再次使其变暗。计时器会很合适
private class MySystemUiVisibilityChangeListener implements View.OnSystemUiVisibilityChangeListener {
@Override
public void onSystemUiVisibilityChange(int visibility) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
MyActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mRootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
});
}
}, 1000);
}
}
我稍微改变了Karanlos的回答:
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
AudioRecordTest.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (ivIndicator.getVisibility() == View.VISIBLE)
ivIndicator.setVisibility(View.INVISIBLE);
else if (ivIndicator.getVisibility() == View.INVISIBLE)
ivIndicator.setVisibility(View.VISIBLE);
}
});
}
};
timer.scheduleAtFixedRate(task, 0, 500);
您不需要创建新类或实现任何东西。只需像他的回答一样制作一个
TimerTask
,并使用scheduleAtFixedRate(task,delay,period)
对其进行调度,此方法将以毫秒为单位,每隔时间段运行TimerTask
。不确定这在2012年是否可用,但现在可以使用活动的onWindowFocusChanged()
回调:
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
}
你把getWindow().getDecorView().setSystemMiviability(视图、系统、用户界面、标志、低姿态)放在哪里
,如果您将其放入onCreate
,尝试将其移动到onResume
,查看是否helps@Wenhui:正如我所说,onResume没有被调用(因为onPause也没有被调用-活动在点击状态栏后一直处于“活动”状态)-为了确保我将此代码移动到onResume并再次测试-这没有帮助,所以我仍然不知道如何实现这一点。我可以确认这对我来说是有效的,我找到的所有其他解决方案都没有。好吧,它工作了,但只有在最初和触摸主页按钮并取消它时。在游戏视图中再次单击时不会。