我的Android刘海屏适配方法

小张感觉这个东西也没有太多可说的,毕竟按照现在的发展趋势,Android刘海屏马上要被消灭了…

1.获取状态栏高度手动往下挤布局

获取高度状态栏/工具栏高度代码:

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;
int contentViewTop= 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int TitleBarHeight= contentViewTop - StatusBarHeight;

   Log.i("*** Jorgesys :: ", "StatusBar Height= " + StatusBarHeight + " , TitleBar Height = " + TitleBarHeight); 

在Activity的onCreat中获取状态栏的高度:

public int getStatusBarHeight() {
  int result = 0;
  int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
  if (resourceId > 0) {
      result = getResources().getDimensionPixelSize(resourceId);
  }
  return result;
}

google 官方提供的方法是:

DisplayCutout cutout = mContext.getDisplayCutout();

可以根据DisplayCutout来判断刘海的位置和大小,但是很不幸,Android≠安卓。在水深火热的中国安卓环境下,各家制定了自己的规则,甚至有的厂商改掉了getDisplayCutout的返回值…所以个人感觉上面的方法是目前最合适最简单的…

有个东西要说一下,如果你不按照各家的规则去说明自己适配了刘海屏,那么那家的ui会默认不把你归类到‘已适配’的分类中,需要手动在设置中开启。

2.直接用fitinwindows固定布局,这样对于首页是多tab的app很不友好,特别是在父窗口的布局设置了这个属性,会把自窗口的东西全部挤下去…还有分段式背景也会存在问题。

你可能会觉得上面的方法很垃圾…但是小张真的觉得很实用…流下了没有技术的泪水…

发表评论