存档

文章标签 ‘透明’

android安卓4.4(api:19)以上做成状态栏(通知栏)全背景透明的效果

2015年8月20日 没有评论

效果如图: 透明状态栏功能添加

——————————-

方案1:

在res/values-v19中新建styles.xml,内容如下:

<resources>

    <style name=”AppBaseTheme” parent=”android:Theme.Holo.Light.NoActionBar.TranslucentDecor”>
        <item name=”android:windowTranslucentStatus”>true</item>
        <item name=”android:windowTranslucentNavigation”>true</item>
    </style>
</resources>

将application的样式应用为:AppBaseTheme(如果是单个activity,那么就给单独的activity增加):

android:theme=”@style/AppBaseTheme”

观看如下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” >

    <LinearLayout
        android:id=”@+id/base_status”
        android:layout_width=”match_parent”
        android:layout_height=”wrap_content”
        android:background=”#e759a3″
        android:orientation=”horizontal” >
    </LinearLayout>

    <LinearLayout
        android:id=”@+id/base_title”
        android:layout_width=”match_parent”
        android:layout_height=”60dp”
        android:background=”#e759a3″
        android:orientation=”horizontal” >
    </LinearLayout>

    <LinearLayout
        android:id=”@+id/base_content”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:orientation=”vertical” >
    </LinearLayout>

</LinearLayout>

如此之后,布局文件根节点是靠顶部对其的,这个时候只要将根布局里面的base_status的高度,是:

在setContentView之后加入:

if (android.os.Build.VERSION.SDK_INT > 18) {

            LinearLayout linearLayout = (LinearLayout) this.findViewById(R.id.base_status);
//设置          linearLayout的高度为:getActionBarHeight() + getStatusBarHeight()

就可以了。

}

附带函数:

    // 获取手机状态栏高度
    public int getStatusBarHeight() {
        Class<?> c = null;
        Object obj = null;
        Field field = null;
        int x = 0, statusBarHeight = 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());
            statusBarHeight = getResources().getDimensionPixelSize(x);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return statusBarHeight;
    }

    // 获取ActionBar的高度
    public int getActionBarHeight() {
        TypedValue tv = new TypedValue();
        int actionBarHeight = 0;
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) // 如果资源是存在的、有效的
        {
            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
        }
        return actionBarHeight;
    }

 

————————————————

 

方案2:,利用工具类:SystemBarTintManager.java(SystemBarTintManager.java.rar

和上面差不多,在activity中使用:

if (android.os.Build.VERSION.SDK_INT > 18) {

SystemBarTintManager mTintManager = new SystemBarTintManager(this);
            mTintManager.setStatusBarTintEnabled(true);
            mTintManager.setNavigationBarTintEnabled(false);
            mTintManager.setTintColor(Color.parseColor(“#e759a3”));
            //SystemBarConfig config = mTintManager.getConfig();

}

这个时候在xml文件中加入:

android:clipToPadding=”true”
android:fitsSystemWindows=”true”

并删除第一种的:

    <LinearLayout
        android:id=”@+id/base_status”
        android:layout_width=”match_parent”
        android:layout_height=”wrap_content”
        android:background=”#e759a3″
        android:orientation=”horizontal” >
    </LinearLayout>

分类: android 标签: , ,
css.php