Android状态栏选型-颜色/沉浸式

2016-08-31  本文已影响228人  学渣罗小贱

Android状态栏选型-颜色/沉浸式

方法1:values-v19下的styles.xml 设置windowTranslucentStatus为true



方法2:java中设置



注:以上方式支持一般的页面,但是像侧滑栏菜单这种事支持不了的!

关于侧滑栏菜单的沉侵式效果

要创建一个BaseActivity:

@TargetApi(19)
@Override
protected void onCreate(Bundle savedInstanceState) {
    if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
        // // 全屏不隐藏状态栏
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
         // 设置状态栏透明
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
    super.onCreate(savedInstanceState);
}

子Activity继承

@TargetApi(19)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv_status = (TextView) findViewById(R.id.tv_status);

    if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
        tv_status.setHeight(getStatusHeight(this));
        tv_status.setVisibility(View.VISIBLE);
    } else {
        tv_status.setHeight(0);
        tv_status.setVisibility(View.GONE);
    }
}
//getStatusHeight方法为计算状态栏高度的方法:
public int getStatusHeight(Activity activity) {
    int statusHeight = 0;
    Rect localRect = new Rect();
    activity.getWindow().getDecorView()
            .getWindowVisibleDisplayFrame(localRect);
    statusHeight = localRect.top;
    if (0 == statusHeight) {
        Class<?> localClass;
        try {
            localClass = Class.forName("com.android.internal.R$dimen");
            Object localObject = localClass.newInstance();
            int i5 = Integer.parseInt(localClass
                    .getField("status_bar_height").get(localObject)
                    .toString());
            statusHeight = activity.getResources()
                    .getDimensionPixelSize(i5);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return statusHeight;
}

布局Xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/tv_status"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00ccee" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#00ccee" >

    <TextView
        android:id="@+id/tv_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:text="菜单"
        android:textColor="#FFFFFF"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="消息"
        android:textColor="#FFFFFF"
        android:textSize="18sp" />
    </RelativeLayout>
</LinearLayout>

注:tv_status控件就是用来设置为状态栏高度的

以上解决不了标题栏文字被提升的问题!下次会写出解决方法!

上一篇下一篇

猜你喜欢

热点阅读