在我的应用程序中,我在View的onMeasure()覆盖之一上有一个无限循环.从我的onMeasure中的断点开始调试源代码,我能够一直跟踪堆栈跟踪到PhoneWindow $ DecorView的measure()(我的View Hierarchy中最顶级的类),它由ViewRoot调用.performTraversals().现在,如果我继续踩过来,我最终会通过Looper.loop()类中的消息再次调用PhoneWindow $ DecorView的measure().我猜是有些东西排队了一条需要重新测量的消息,比如无效.
我的问题是,什么触发了一个度量调用需要在View上发生?
根据我对布局/测量/绘制过程的理解,这只会在特定视图上调用invalidate()方法时发生,并且会逐渐减少并执行该视图无效的布局/测量/绘制过程以及所有它的孩子.我会假设我的视图层次结构中的最顶层视图无效.
但是,我已经明确地对每一个无效的调用设置了一个断点,并且没有以某种无限的方式调用invalidate.所以我认为不是这样的.是否有其他方法可以触发测量通过?内部可以触发这个吗?在看到无限无效之后,我有点想法了.
是否可以永久删除活动上的导航栏?我想用平板电脑上屏幕按钮上显示的按钮删除栏,而不是操作栏.在这里.
我知道不建议这样做,我没有做出这个决定,但我需要这样做.在我的布局上,还有另一个按钮可以离开活动.我的应用程序的其余部分可以拥有并确实拥有导航栏.
我找到了这段代码并对其进行了一些调整.问题是即使我隐藏导航栏,也会留下黑色空间.我想系统会计算屏幕尺寸并考虑到导航栏?
public static class Content extends ImageView implements View.OnSystemUiVisibilityChangeListener, View.OnClickListener, ActionBar.OnMenuVisibilityListener {
Activity mActivity;
TextView mTitleView;
Button mPlayButton;
SeekBar mSeekView;
boolean mAddedMenuListener;
boolean mMenusOpen;
boolean mPaused;
boolean mNavVisible;
int mLastSystemUiVis;
Runnable mNavHider = new Runnable() {
@Override public void run() {
setNavVisibility(false);
}
};
public Content(Context context, AttributeSet attrs) {
super(context, attrs);
setOnSystemUiVisibilityChangeListener(this);
setOnClickListener(this);
}
public void init(Activity activity, TextView title, Button playButton,
SeekBar seek) {
// This called by the containing activity to supply the …Run Code Online (Sandbox Code Playgroud) public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
this.getWindow().getDecorView().setSystemUiVisibility(getSystemUiFlags());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private static int getSystemUiFlags() {
return View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
}
}
Run Code Online (Sandbox Code Playgroud)
第一次开始后

按下音量按钮后或按下最近的应用程序两次后

我看到QuickPic应用程序没有这个bug.我想知道他们是如何省略它的.
在我的平板电脑上,它有以下栏来控制回来,回家等(我不知道正确的名称,状态栏?控制栏?操作栏?或其他)
在程序中,它使用以下方法来全屏显示.
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.PROGRESS_INDETERMINATE_OFF);
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么酒吧还在这里.因此,我无法获得正确的屏幕尺寸.
谁能告诉我如何删除它?

我想知道如何隐藏Android应用程序中的导航栏?
我知道如何隐藏它,但是一旦我触摸屏幕,它就会弹回来.我想隐藏它,就像Clash of Clans之类的游戏隐藏它一样,弹出它的唯一方法是向下滑动通知或者滑动导航栏应该在哪里.
我正在尝试开发一个包含 2 个主要活动的全屏应用程序:LoginActivity 和 DashboardActivity。
LoginActivity 只有用于用户输入登录的 UI,如用户名和密码。在这个屏幕中,导航和状态栏完全隐藏,不留任何空间。
登录 DashboardActivity 后,我有一个带有导航抽屉的工具栏。在这个活动中,我做了我在 LoginActivity 中所做的所有事情。发生的情况是导航栏和状态栏被隐藏,但导航栏在单独隐藏之前占用的空间仍然存在。
这只发生在 Android 5+ 中。它在 Kitkat 中运行良好。