国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 高仿QQ 沉浸式狀態欄

2019-12-12 04:15:02
字體:
來源:轉載
供稿:網友

前言:

在進入今天正題前,還是老樣子先談談感想吧,最近感覺整個都失去了方向感,好迷茫!找工作又失敗了,難道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"> <RelativeLayout  android:fitsSystemWindows="true"  android:clipToPadding="true"  android:layout_width="match_parent"  android:layout_height="80dp"  android:background="#0099cc">  <de.hdodenhof.circleimageview.CircleImageView   android: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>  <TextView   android: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" />  <TextView   android: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> <TextView  android: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{ @Override protected 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 { @Override protected 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上的一個開源庫來的;

地址:

xml布局中添加:

都是大同小異來的,我個人覺得第一種方法是最好實現和理解的,大家都可以嘗試一下,希望對你們有所幫助!最后貼出沉浸式狀態欄-高仿QQ的效果圖如下:

以上所述是小編給大家介紹的Android 高仿QQ 沉浸式狀態欄,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥城市| 永宁县| 西吉县| 新化县| 昆明市| 岚皋县| 正阳县| 融水| 长白| 白沙| 仁怀市| 秀山| 南阳市| 阜新市| 奈曼旗| 祥云县| 泰宁县| 彝良县| 侯马市| 治县。| 湟源县| 新兴县| 花莲县| 依安县| 龙南县| 旺苍县| 永州市| 沅陵县| 晋城| 涿鹿县| 囊谦县| 大理市| 民勤县| 大厂| 泰安市| 武定县| 汕尾市| 大宁县| 凉城县| 凯里市| 信宜市|