在有标题栏的情况下,定义了透明状态栏后,如果不对视图进行设置的话,视图将会有一部分被标题栏所遮挡。在这个情况下,有两个办法可以解决,一是使用控件自绘标题栏,二是,获取标题栏和状态栏的高度,再将视图下移。这里讨论第二种办法:
在网上找了不少的资料,但是大部分都是这样的:
- Rect frame = new Rect();
- getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
- int statusBarHeight = frame.top;//状态栏高度
- int actionBarHeight = getActionBar().getHeight(); //actionbar高度
然而如果将这两个放在onCreate中使用的话,获取到的高度为0,并不能正常使用。
在这里贴上两段代码,他们在任何时候,包括onCreate()中都可以获取正确的高度。
- Class<?> c ;
- Object obj ;
- Field field ;
- int x = 0, sbar = 0;
- try {
- c = Class.forName("com.android.internal.R$dimen");
- obj = c.newInstance();
- field = c.getField("status_bar_height");
- x = Integer.parseInt(field.get(obj).toString());
- sbar = getResources().getDimensionPixelSize(x);//状态栏高度
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- TypedArray actionbarSizeTypedArray=this.obtainStyledAttributes(new int[]{android.R.attr.actionBarSize});
- float h=actionbarSizeTypedArray.getDimension(0,0);//actionbar高度
对于actionbar高度,其实也可以直接设置它的高度,这里就不说了。