好久没写博客了,最近工作不是很忙,就想写一下!
关于适配的个人解决方案,这是我用的一个方案,经常用,也可能是比较笨的方法之一,希望各位不要见笑!
个人的词藻比较欠缺,直接上代码吧!
下面这些代码 我都是写在基础BaseActivity里面的。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); if(hasSoftKeys(getWindowManager())) { //有虚拟键的取消状态栏渲染防止底部导航栏被虚拟键遮挡、这个是我匹配华为的虚拟键写的 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } }else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } } }下面开始上个人的笨方法布局——>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#f0eff3" > <RelativeLayout android:id="@+id/topbar1" android:layout_width="fill_parent" android:layout_height="40dp" android:background="#2C2F2E" //可以设置的颜色与标题兰的颜色一样这样就达成了伪沉浸式 android:gravity="bottom"> <include layout="@layout/head_activity" />//这个就是顶部的标题 </RelativeLayout>
当你的布局这样写时,就用下面这个方法
/** * 设置沉浸式状态栏 父布局为LinearLayout 引用 */ protected void setStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // TODO: 2017/7/6 沉浸式设置 每个页面想要沉浸式 必须加入 下面这个 findID final ViewGroup linear_bar = (ViewGroup) findViewById(R.id.topbar1); final int statusHeight = getStatusBarHeight(); linear_bar.post(new Runnable() { @Override public void run() { int titleHeight = linear_bar.getHeight(); android.widget.LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) linear_bar.getLayoutParams(); params.height = statusHeight + titleHeight; linear_bar.setLayoutParams(params); } }); } } 如果父布局用的是RelativeLayout就略微修改一下 /** * 父布局为RelativeLayout 时引用 */ protected void setListStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // TODO: 2017/7/6 沉浸式设置 每个页面想要沉浸式 必须加入 下面这个 findID final ViewGroup linear_bar = (ViewGroup) findViewById(R.id.topbar1); final int statusHeight = getStatusBarHeight(); linear_bar.post(new Runnable() { @Override public void run() { int titleHeight = linear_bar.getHeight(); android.widget.RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) linear_bar.getLayoutParams(); params.height = statusHeight + titleHeight; linear_bar.setLayoutParams(params); } }); } }
其余代码我也一次贴出来了,希望大家多多指点
/** * 获取状态栏的高度 * @return */ protected int getStatusBarHeight(){ try { Class<?> c= Class.forName("com.android.internal.R$dimen"); Object obj=c.newInstance(); Field field=c.getField("status_bar_height"); int x= Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); }catch(Exception e){ e.printStackTrace(); } return 0; } /** * 判断底部navigator是否已经显示 *@paramwindowManager *@return */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public static boolean hasSoftKeys(WindowManager windowManager){ Display d=windowManager.getDefaultDisplay(); DisplayMetrics realDisplayMetrics=new DisplayMetrics(); d.getRealMetrics(realDisplayMetrics); int realHeight=realDisplayMetrics.heightPixels; int realWidth=realDisplayMetrics.widthPixels; DisplayMetrics displayMetrics=new DisplayMetrics(); d.getMetrics(displayMetrics); int displayHeight=displayMetrics.heightPixels; int displayWidth=displayMetrics.widthPixels; return(realWidth-displayWidth) >0|| (realHeight-displayHeight) >0; } 接下来我是如何使用的再给大家截个图
效果图如下