如何重叠系统底部导航栏。

时间:2015-07-21 09:08:37

标签: android

enter image description here我试图使用窗口管理器重叠系统底部导航栏,但我不能这样做。我正在使用波纹管代码。我已将重力设置为底部,因此它显示我的活动视图底部的视图层不会与底部导航栏重叠。

public void onCreate(Bundle savedInstancestate)
{
  super.onCreate(savedInstancestate);
  this.requestWindowFeature(Window.FEATURE_NO_TITLE);7

  manager = ((WindowManager)    getApplicationContext().getSystemService(Context.WINDOW_SERVICE));

  localLayoutParams = new WindowManager.LayoutParams();
  localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
  localLayoutParams.gravity = Gravity.BOTTOM;    

  localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|

       // this is to enable the notification to recieve touch events
       //WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN |
        //WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |

       // Draws over navigation bar
  WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;


  //localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
  localLayoutParams.height = (int) (50 *     getResources().getDisplayMetrics().scaledDensity);
  localLayoutParams.format = PixelFormat.TRANSPARENT;

  view = new customView(this);

  manager.addView(view, localLayoutParams);

  setContentView(R.layout.Imges);
  }
      public class customView extends ViewGroup {

              public customView(Context context) {
                super(context);
              }

            @Override
            protected void onLayout(boolean changed, int l, int t, int r, int b) {
            }

            @Override
            public boolean onInterceptTouchEvent(MotionEvent ev) {
                Log.v("customView", "------Intercepted-------");
                return true;
            }
        }         

使用此代码我无法重叠导航,它在我的活动视图底部显示新的自定义视图,但不能与自定义视图重叠导航栏。

任何人都可以帮我这个,用自定义视图重叠导航栏。?

1 个答案:

答案 0 :(得分:0)

实际上有一些解决方案。由于市场中有没有硬件按钮的设备,因此无法重叠使其完全消失。但是,您可以相应地优雅地安排您的布局。

例如, 在目录中将其添加到 styles.xml (v21):

<item name="android:windowDrawsSystemBarBackgrounds">false</item>

或者如果它不起作用,

boolean hasMenuKey = ViewConfiguration.get(getContext()).hasPermanentMenuKey();
    boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);

    if(!hasMenuKey && !hasBackKey) {
        // Do whatever you need to do, this device has a navigation bar
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.MATCH_PARENT,
                FrameLayout.LayoutParams.MATCH_PARENT
        );
        params.setMargins(0, 0, 0, 75);
        entrancelayout.setLayoutParams(params);
        entrancelayout.requestLayout();
    }

我有一个FrameLayout,您可以将它用于任何布局。 SetMargins在示例中增加了余量。如果没有硬件后退和菜单按钮,它假定系统栏就在那里。