沉浸式状态栏-高仿QQ

news/2025/3/21 2:31:41/

前言:
在进入今天正题前,还是老样子先谈谈感想吧,最近感觉整个都失去了方向感,好迷茫!找工作又失败了,难道Android真的饱和了?这两天我一直没出门,除了下楼哪外卖就是宅宿舍了,静想了许久,我还是不能忘了初心,我相信我找不到工作的原因有很多,最关键的还是要技术够硬才行啊,奔跑吧孩子!接下来我就给大家介绍怎样快速打造沉浸式状态栏吧,虽然感觉有点相见恨晚,但其实不完!


一:何为沉浸式状态栏?


沉浸式状态栏是Google从Android 4.4开始,给我们开发者提供的一套能透明的系统ui样式,这样样式是给状态栏和导航栏的,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.0以上系统一样了。

 

先给你们来对比一下加了沉浸式和没加沉浸式的样式效果图吧,如下图所示:

 

 

 (非沉浸式)

 

 (沉浸式)

 

 


在此相信大家都了解什么是沉浸式状态栏了;目前打开很多APP都会有这种效果,可想而知,沉浸式状态栏还是挺实用的!




二、使用沉浸式状态栏高仿QQ:

 

 

 

 

实现沉浸式状态栏的步骤灰常简单:因为沉浸式状态栏是Android4.4后才推出的,所以首先在程序中加上判断,即:当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏,接着在语句中设置状态栏和导航栏为透明即可:

 

 

 

 

//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}

 

最后在布局文件中加上、、、

 

android:fitsSystemWindows="true"
android:clipToPadding="true"

 

 

这样就实现沉浸式状态栏了!
就是这么简单,就是这么耐使!源码是最好的导师,快看看整体代码吧:

xml布局文件:

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffffff"android:orientation="vertical"tools:context=".MainActivity"><RelativeLayoutandroid:fitsSystemWindows="true"android:clipToPadding="true"android:layout_width="match_parent"android:layout_height="80dp"android:background="#0099cc"><de.hdodenhof.circleimageview.CircleImageViewandroid:id="@+id/img_head"android:layout_width="40dp"android:layout_height="40dp"android:layout_gravity="center_horizontal"android:layout_marginTop="13dp"android:layout_marginLeft="15dp"app:civ_border_width="2dp"app:civ_border_color="#FFFFFF"android:src="@mipmap/meinv"></de.hdodenhof.circleimageview.CircleImageView><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="26dp"android:layout_centerHorizontal="true"android:text="联系人"android:textColor="@android:color/white"android:textSize="18sp" /><TextViewandroid:id="@+id/tv_right_add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="26dp"android:layout_marginRight="15dp"android:layout_alignParentRight="true"android:text="添加"android:textColor="@android:color/white"android:textSize="18sp" /></RelativeLayout><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="沉浸式状态栏"android:textSize="22sp"android:background="#E0FFFF"/></LinearLayout>

 

 

 

 

MainActivity中:

 

 

package com.zsml.chaotranstintbar;import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}}}

 

 

 

实现沉浸式状态栏的其他方法:动态加入、第三方库。

1、动态实现:

动态实现也是比较简单的,首先是隐藏布局,最后动态计算状态栏高度并设置,都是在MainActivity中操作的,布局文件也就不用加上 android:fitsSystemWindows="true"、
  android:clipToPadding="true" 这两句了!

所以直接给源码吧:

MainActivity中:

 

import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;import java.lang.reflect.Field;public class TwoActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去掉标题this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_two);//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);LinearLayout linear_bar=(LinearLayout)findViewById(R.id.linear_bar);linear_bar.setVisibility(View.VISIBLE);int statusHeight=getStatusBarHeight();LinearLayout.LayoutParams params=(LinearLayout.LayoutParams )linear_bar.getLayoutParams();params.height=statusHeight;linear_bar.setLayoutParams(params);}}/*** 获取状态栏的高度* @return*/private 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;}}

 

 

 

这样就完事了,是不是一样那么简单、、、

 

2、第三方库实现(SystemBarTint)

SystemBarTint是开源到github上的一个开源库来的;

地址:https://github.com/jgilfelt/SystemBarTint

使用步骤:

关联库:compile'com.readystatesoftware.systembartint:systembartint:1.0.3'

xml布局中添加:

 

android:fitsSystemWindows="true"
android:clipToPadding="true"

 

MainActivity中实现:

 

import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;import com.readystatesoftware.systembartint.SystemBarTintManager;public class ThreeActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_three);//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//透明状态栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明导航栏getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);SystemBarTintManager tintManager = new SystemBarTintManager(this);// 激活状态栏tintManager.setStatusBarTintEnabled(true);// enable navigation bar tint 激活导航栏tintManager.setNavigationBarTintEnabled(true);//设置系统栏设置颜色//tintManager.setTintColor(R.color.red);//给状态栏设置颜色tintManager.setStatusBarTintResource(R.color.middle_color);// 设置导航栏设置资源tintManager.setNavigationBarTintResource(R.color.androidColorE);}}
}

 

 

 

都是大同小异来的,我个人觉得第一种方法是最好实现和理解的,大家都可以尝试一下,希望对你们有所帮助!最后贴出沉浸式状态栏-高仿QQ的效果图如下:

 

 

扫一扫关注我的微信公众号:程序猿在广东

 

 

 

 

 


http://www.ppmy.cn/news/536171.html

相关文章

仿QQ侧滑

转载请标明出处&#xff1a; http://blog.csdn.net/developer_jiangqq/article/details/50043159 本文出自:【江清清的博客】 (一).前言: 【好消息】个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新&#xff0c;请大家关注收藏:http://www.lcode.org 这…

qq最新侧滑效果实现

首先本文我是参照鸿洋大师的博客http://blog.csdn.net/lmj623565791/article/details/39257409 来学习&#xff0c;在自己根据 他的介绍实现了qq侧滑功能&#xff0c;这里我简单的做一下介绍并且巩固一下自己的知识。只有自己去敲了才能发现问题。顺便 说一下苦逼的过年终于…

仿QQ新版本侧滑效果

1、此效果使用了csdn大神孙国威的代码案例在此感谢附上参考博客地址&#xff1a; http://blog.csdn.net/manoel/article/details/39013095/#plain 2、slidingmenu库不需要修改&#xff0c;弄下来可以直接使用 3、demo中的代码是支持单侧的&#xff0c;我仅仅给加了个双侧支持…

高仿QQ首页消息和电话切换的实现

因为之前项目中有用到类似的效果。自己就整理了一下。大致就只用了两种&#xff0c;简单介绍下&#xff0c;顺便分享给有需要的朋友。愿做这行的人少走一些弯路。哈哈&#xff0c;不说了废话了。先看看效果图片吧&#xff01;等等介绍实现方法。 首先介绍第一种&#xff1a; 一…

仿QQ侧滑菜单效果

之前使用过SlideMenu&#xff0c;感觉是一个不错的UI交互方式&#xff0c;在最新的QQ6.1里看到最新的侧滑菜单&#xff0c;滑动主屏幕菜单才显示出来&#xff0c;因此就参考SlideMenu模拟了一个侧滑菜单&#xff0c;同时实现了底部设置按钮的点击事件。 从GitHub上的源码可以…

【小技巧】腾讯QQ——腾讯网迷你版弹窗

前言&#xff1a;一些解决流氓弹窗、广告、挖矿等问题的小技巧。 环境&#xff1a;win10。 均为本人搜索、总结出来的一些简单方法。 计算机小白&#xff0c;如有问题请及时提出&#xff0c;见谅。 侵删。 登录QQ时&#xff0c;会弹出腾讯网迷你版&#xff0c;比较烦人。 按理说…

漂亮的侧滑主页(仿QQ、腾讯QQ首页侧滑效果)

项目原地址&#xff1a; https://github.com/SpecialCyCi/AndroidResideMenu GitHub文档说明&#xff1a; DEMO This copy is the demo. Version Migration Upgrading tov1.4 fromv1.3, v1.2, v1.1, v1.0 Duplicate the followed code in dispatchTouchEvent() of Activity…

高仿QQ的个性名片

效果图 中间的圆形头像和光环波形讲解请看&#xff1a;http://blog.csdn.net/cj_286/article/details/52839036 周围的气泡布局&#xff0c;因为布局RatioLayout是继承自ViewGroup&#xff0c;所以布局layout就可以根据自己的需求来布局其子view&#xff0c;view.layout(int…