安卓4.0通知栏沉浸式写法+自定义标题栏设置
来源:互联网 发布:知柏地黄丸主治 编辑:程序博客网 时间:2024/06/05 15:30
沉浸式是安卓5.0之后通知栏开始和IOS一样了,然而4.0还没有变成沉浸式。
这篇来说下如何实现沉浸式通知栏
我看了许多的沉浸式写法,自己在实现的时候,也用了自己的方法。
首先创建项目,把 AndroidManifest.xml 文件里的属性修改标题栏
android:theme="@android:style/Theme.Light.NoTitleBar"
在创建一个xml文件 upbar.xml 代码如下:
<?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:background="#4169E1" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginTop="25dp" > <TextView android:id="@+id/upbar_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="name" android:textColor="#fff" android:textSize="20sp" /> <ImageView android:id="@+id/upbar_Img1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:src="@drawable/back" /> <ImageView android:id="@+id/upbar_Img2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@+id/upbar_Img1" android:src="@drawable/edit" /> </RelativeLayout></LinearLayout>
在创建一个class文件 继承与 FrameLayout类 用来实现upbar.xml 代码如下:
package com.example.customdemo;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.TextView;public class UpBar extends FrameLayout {private IUpBarOnClickListener Img1listener;private IUpBarOnClickListener Img2listener;private IUpBarOnClickListener Titlelistener;private ImageView mImg1;private ImageView mImg2;private TextView mTitle;public UpBar(Context context, AttributeSet attrs) {super(context, attrs);LayoutInflater.from(context).inflate(R.layout.upbar, this);initview();OnClick();}private void OnClick() {mImg1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {if (Img1listener != null) {Img1listener.OnClick(arg0);}}});mImg2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {if (Img2listener != null) {Img2listener.OnClick(arg0);}}});mTitle.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {if (Titlelistener != null) {Titlelistener.OnClick(arg0);}}});}private void initview() {mImg1 = (ImageView) findViewById(R.id.upbar_Img1);mImg2 = (ImageView) findViewById(R.id.upbar_Img2);mTitle = (TextView) findViewById(R.id.upbar_name);}/*** * 设置子控件是否显示 * @param isShow * @param v */public void setChildVisibility(boolean isShow, View v){if (isShow) {v.setVisibility(VISIBLE);}else{v.setVisibility(INVISIBLE);}}//设置监听事件public void setImg1Listener(IUpBarOnClickListener listener){Img1listener = listener;}public void setImg2Listener(IUpBarOnClickListener listener){Img2listener = listener;}public void setTitleListener(IUpBarOnClickListener listener){Titlelistener = listener;}public ImageView getmImg1() {return mImg1;}public void setImg1ByRes(int resId) {this.mImg1.setImageResource(resId);}public ImageView getmImg2() {return mImg2;}public void setImg2ByRes(int resId) {this.mImg2.setImageResource(resId);}public TextView getmTitle() {return mTitle;}public void setTitleText(String text) {this.mTitle.setText(text);}}
在MainActivity代码如下:
package com.example.customdemo;import android.annotation.TargetApi;import android.app.Activity;import android.os.Build.VERSION;import android.os.Build.VERSION_CODES;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.WindowManager;import android.widget.Toast;public class MainActivity extends Activity {private UpBar mUpbar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setNotificationBar();initupbar();}private void initupbar() {mUpbar = (UpBar) findViewById(R.id.upBar1);//设置title文字mUpbar.setTitleText("首页");//设置左边按钮不显示mUpbar.setChildVisibility(false, mUpbar.getmImg1());//设置右边按钮事件监听mUpbar.setImg2Listener(new IUpBarOnClickListener() {@Overridepublic void OnClick(View view) {Toast.makeText(MainActivity.this, "我是右边按钮", Toast.LENGTH_SHORT).show();}});}/*** * 19以上版本取消标题栏 */@TargetApi(19)private void setNotificationBar() {if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}}
运行后的结果为:
点击按钮
其中核心的代码块为:
<span style="white-space:pre"></span>/*** * 19以上版本取消标题栏 */@TargetApi(19)private void setNotificationBar() {if(VERSION.SDK_INT >= VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}然后我使用创建一个自定义的upbar 结构图如下
我将relativelayout布局设置了一个属性
android:layout_marginTop="25dp"25dp刚好是系统自带的状态栏的高度,我就是靠着一个upbar的自定义view覆盖掉原本系统的状态栏实现沉浸式模式
结语:
第一次写博客,算是个记录,也实现了沉浸式的状态栏,需要更好的沉浸式的状态栏 可以找大牛的看看!
1 0
- 安卓4.0通知栏沉浸式写法+自定义标题栏设置
- 安卓沉浸式标题栏
- Android 安卓 自定义标题栏+沉浸式状态栏
- 安卓自定义标题栏
- 沉浸式通知栏
- 沉浸式通知栏
- 自定义标题栏之ActionBar与“沉浸式”标题栏
- 安卓轻松去掉标题栏和状态栏(通知栏)
- 在安卓APP中去除标题栏以及通知栏
- 安卓 自定义通知
- 安卓沉浸式
- 安卓沉浸式
- 安卓-自定义标题栏组件
- Android沉浸式通知栏
- Android沉浸式通知栏
- Android沉浸式通知栏
- Android 沉浸式通知栏
- Android_UI_沉浸式通知栏
- git的使用
- Intellij tomcat内存不足
- 【代码向】简易计算器逻辑
- c#的加密AES——base64
- Android Activity中Intent的一些见解
- 安卓4.0通知栏沉浸式写法+自定义标题栏设置
- 在存储过程中SET XACT_ABORT ON 有什么用
- com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte
- ORACLE函数大全
- TUXEDO中间件介绍及应用
- Ubuntu下忘记mysql账号密码
- K好数【DP】
- JS中Null与Undefined的区别
- HOG特征