android安卓4.4(api:19)以上做成状态栏(通知栏)全背景透明的效果
——————————-
方案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>
近期评论