在导航栏后面或上方绘制叠加层

时间:2016-04-18 11:15:34

标签: android overlay navigationbar

我正在创建一个应该绘制全屏叠加效果的应用。锁屏等东西。用户设置了一些计时器,当时间到了,这个叠加应该出现。

但叠加层并不涵盖系统导航栏。当导航栏是半透明的时,这是一个问题。用户可以触摸系统按钮,并可以看到它们背后的一些可变背景。因此,用户可以看到锁定屏幕后面的内容。这是一个问题。 我怎么能阻止这种情况呢?

请注意,锁屏覆盖不是活动。用户设置计时器,可以自由浏览他的设备。当时机到来时,应用程序会在屏幕上绘制一些视图,如下所示:

var serializer = new JsonSerializer();
serializer.TypeNameHandling = TypeNameHandling.Auto;
JArray jArr = JArray.FromObject(paramsGenericArr, serializer);

,其中

View overlayView = new OverlayView(this);

windowManager.addView(overlayView, OverlayView.createLayoutParams(retrieveScreenHeight()));

1 个答案:

答案 0 :(得分:0)

如果您想覆盖系统栏,我假设您希望将覆盖视图的活动设置为全屏。

类似下面的代码。

public class ActivityName extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      // remove title
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
      setContentView(R.layout.main);
  }
}

然后您的活动不会显示系统栏,您的视图会一直显示在屏幕顶部。

编辑:从你上次评论开始,我就是这样做的:

步骤1:创建此FullScreenLockActivity:

public class FullScreenLockActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      // remove title
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      // set to fullScreen
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
      //Load your black semi-transparent view
      setContentView(R.layout.lock_screen);
  }

  //Override this to prevent the user to close this activity by pressing the back button
  @Override
  public void onBackPressed() {}

}

第2步:在FullScreenLockActivity中实现“解锁屏幕”行为

步骤3:要显示锁定屏幕,请致电

Intent i = new Intent(yourCurrentActivity.this, FullScreenLockActivity.class);
startActivity(i);
相关问题