studio,中引入沉浸式兼容庫
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了蘆淞免費建站歡迎大家使用!
compile ‘com.readystatesoftware.systembartint:systembartint:1.0.3’
eclipse,可以導入相應(yīng)的那個類。
第一類,兼容actionbar
第一步:設(shè)置activity主題android:theme=”@style/ActionBarTheme”
style name="ActionBarTheme" parent="android:Theme.Holo.Light.DarkActionBar"
!-- API 14 theme customizations can go here. --
item name="android:actionBarStyle"@style/ActionBarStyle/item
/style
style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse"
item name="android:background"@color/actionbar_bg/item
/style
第二步:設(shè)置狀態(tài)欄透明,然后設(shè)置狀態(tài)欄沉浸的顏色
@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags = ~bits;
}
win.setAttributes(winParams);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
//設(shè)置沉浸的顏色 tintManager.setStatusBarTintResource(R.color.statusbar_bg);}
第三步:設(shè)置適應(yīng)windows,在布局文件設(shè)置
android:fitsSystemWindows=”true”
如果不設(shè)置,應(yīng)用的ui會頂上去,頂進system ui
ok
第二類 沒有actionbar的activity
第一步,設(shè)置主題,android:theme=”@style/FullBleedTheme”
style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar"
!-- API 14 theme customizations can go here. --
/style
style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor"
!-- API 19 theme customizations can go here. --
/style
或者
用toolbar只能設(shè)置Theme.AppCompat.NoActionBar主題
style name="AppThemeToolbar" parent="Theme.AppCompat.NoActionBar"
item name="colorPrimary"#2196F3/item
item name="colorPrimaryDark"#2196F3/item
!--item name="colorPrimaryDark"#1565C0/item--
item name="colorAccent"#E91E63/item
/style
第二步:同上一個第二步。
設(shè)置狀態(tài)欄透明+顏色
mTintManager = new SystemBarTintManager(this);
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setNavigationBarTintEnabled(true); mTintManager.setStatusBarTintResource(R.color.statusbar_bg);
1、如何修改狀態(tài)欄顏色。
2、如何修改狀態(tài)欄文字顏色。
3、如何不被虛擬鍵隱藏,或隱藏虛擬鍵。
4、如何消除沉浸式。
5、如何修改導航欄內(nèi)部的fragment的狀態(tài)欄顏色。
可參考:
在styles.xml中添加style
在manifest.xml文件中進行配置
添加依賴
可以參考:暫無
以下內(nèi)容可以直接復制到工具類中,在activity初始化的時候調(diào)用即可。文字顏色分亮色暗色,分別是白色和黑色。
可以參考:
以下方法可以放置在工具類中方便調(diào)用。
1、不隱藏底部虛擬鍵,不隱藏狀態(tài)欄,布局頂部延伸至狀態(tài)欄頂部不被虛擬鍵遮擋,且狀態(tài)欄透明。
2、隱藏底部的虛擬鍵和狀態(tài)欄
fragment的狀態(tài)欄顏色其實就是activity狀態(tài)欄顏色,所以還是去改變activity的狀態(tài)欄顏色這么一個思路。
使用第三方組件,所以添加依賴
給導航欄控件添加tab切換事件監(jiān)聽,然后動態(tài)改變狀態(tài)欄顏色即可,同樣使用barUtils工具類。
最后在推薦一個github上的關(guān)于沉浸式效果的組件:
沉浸式通知欄Android4.4以上才支持的新特性。4.3不支持。
具體實現(xiàn)方式如下:
1.新建個公共style,設(shè)置android:fitsSystemWindows=true
!-- 設(shè)置應(yīng)用布局時是否考慮系統(tǒng)窗口布局;true -- style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar" item name="android:fitsSystemWindows"true/item /style
2. 修改AndroidManifest.xml,讓所有的activity樣式默認設(shè)置為AppBaseTheme(*不同項目要靈活處理,筆者項目的activity樣式都是統(tǒng)一的所以這樣設(shè)置沒問題,但是實際情況下不同的activity可能調(diào)用的樣式不一樣,需要讀者自行按自己的項目來設(shè)置)
application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme" android:name="****"
3.新增沉浸式通知欄實現(xiàn)類,實現(xiàn)原理很簡單。
1)判斷當前系統(tǒng)版本是不是4.4以上,判斷代碼如下:
if (VERSION.SDK_INT = VERSION_CODES.KITKAT)
2)如果大于4.4則設(shè)置狀態(tài)欄透明化,代碼如下:
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
3)獲取activity的根rootView(DecorView),然后創(chuàng)建一個新的view stateBarView并把它添加到rootView(這里手動給它設(shè)置個ID,下次進來時先判斷rootView是否已創(chuàng)建stateBarView,如果已創(chuàng)建則直接獲取該View這樣可以防止重復創(chuàng)建,導致內(nèi)存泄露)
以下是具體代碼實現(xiàn):
import android.annotation.SuppressLint;import android.app.Activity;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.os.Build;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.widget.FrameLayout.LayoutParams;/** * 沉浸式通知欄公共類 * @author hurrican * */@SuppressLint({ "InlinedApi", "ResourceAsColor" })public class ImmersedNotificationBar { private Activity activity ; //設(shè)置沉浸式通知欄的ID(防止重復創(chuàng)建) private final static int IMMERSED_NOTIFICATION_BAR_ID = 12345678 ; private final static String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height" ; public ImmersedNotificationBar(Activity activity){ this.activity = activity ; } //獲取狀態(tài)欄高度 private int getStatusBarHeight(Resources res){ int statusBarHeight = 0; int resourceId = res.getIdentifier(STATUS_BAR_HEIGHT_RES_NAME, "dimen", "android"); if (resourceId 0) { statusBarHeight = res.getDimensionPixelSize(resourceId); } return statusBarHeight ; } //添加頂部狀態(tài)欄 private View addStateBar(Activity activity,ViewGroup rootView,int statusBarHeight){ //創(chuàng)建新的View,并添加到rootView頂部) View statusBarView ; if(null!=rootView.findViewById(IMMERSED_NOTIFICATION_BAR_ID)){ statusBarView = rootView.findViewById(IMMERSED_NOTIFICATION_BAR_ID); }else{ statusBarView = new View(activity); rootView.addView(statusBarView); } statusBarView.setId(IMMERSED_NOTIFICATION_BAR_ID) ; LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,statusBarHeight); params.gravity = Gravity.TOP; statusBarView.setLayoutParams(params); statusBarView.setVisibility(View.VISIBLE); return statusBarView ; } /** * 設(shè)置狀態(tài)欄顏色 * @param ColorId */ public void setStateBarColor(int ColorId){ if (Build.VERSION.SDK_INT = Build.VERSION_CODES.KITKAT) { Window window = activity.getWindow(); //activity的頂級布局 ViewGroup rootView = (ViewGroup) window.getDecorView(); //透明化狀態(tài)欄 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); Resources res = activity.getResources(); //獲取狀態(tài)欄目的高度 int statusBarHeight = getStatusBarHeight(res); View stateBarView = addStateBar(activity,rootView,statusBarHeight) ; stateBarView.setBackgroundColor(ColorId) ; } } /** * 設(shè)置狀態(tài)欄顏色 * @param ColorId */ public void setStateBarDrawable(Drawable drawable){ if (Build.VERSION.SDK_INT = Build.VERSION_CODES.KITKAT) { Window window = activity.getWindow(); //activity的頂級布局 ViewGroup rootView = (ViewGroup) window.getDecorView(); //透明化狀態(tài)欄 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); Resources res = activity.getResources(); //獲取狀態(tài)欄目的高度 int statusBarHeight = getStatusBarHeight(res); View stateBarView = addStateBar(activity,rootView,statusBarHeight) ; stateBarView.setBackgroundDrawable(drawable) ; } }}
styles.xml設(shè)置如下:
style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/
style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/
style name="AppTheme.NoActionBar"
item name="windowActionBar"false/item
item name="windowNoTitle"true/item
item name="windowActionModeOverlay"true/item
item name="android:actionModeBackground"@drawable/context_menu/item
/style
style name="TranslucentTheme" parent="AppTheme.NoActionBar"
/style
V21的styles.xml設(shè)置如下:
style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /
style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /
style name="AppTheme.NoActionBar"
item name="windowActionBar"false/item
item name="windowNoTitle"true/item
item name="android:windowDrawsSystemBarBackgrounds"true/item
item name="android:windowContentTransitions"true/item
item name="android:statusBarColor"@color/colorPrimary/item
item name="windowActionModeOverlay"true/item
item name="android:actionModeBackground"@drawable/context_menu/item
/style
style name="TranslucentTheme" parent="AppTheme.NoActionBar"
item name="android:windowTranslucentStatus"false/item
item name="android:windowTranslucentNavigation"false/item
/style
再在要顯示的toolbar里加上屬性:
android:fitsSystemWindows="true"
主題的屬性設(shè)置為:
style name="TranslucentTheme" parent="AppTheme.NoActionBar"
當前題目:android沉浸式,android沉浸式狀態(tài)欄和虛擬鍵
文章鏈接:http://www.rwnh.cn/article14/dscoige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、全網(wǎng)營銷推廣、電子商務(wù)、面包屑導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)