日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android自定義ToolBar并實現沉浸式的方法

瀏覽:70日期:2022-09-24 11:08:32

前言

  ToolBar是Android 5.0推出的一個新的導航控件用于取代之前的ActionBar,由于其高度的可定制性、靈活性、具有Material Design風格等優點,越來越多的App也用上了ToolBar。

  沉浸式狀態欄是從android Kitkat(Android 4.4)開始出現的,它可以被設置成與APP頂部相同的顏色,這就使得切換APP時,整個界面就好似切換到了與APP相同的風格樣式一樣。

依賴包:  Toolbar, implementation ’androidx.appcompat:appcompat:1.1.0’

  沉浸式, implementation ’com.gyf.immersionbar:immersionbar:3.0.0’

1、自定義Toolbar步驟:

1)、定義 /values/styles.xml

<?xml version='1.0' encoding='utf-8'?><resources> <style name='TextAppearance_TitleBar_Title' parent='TextAppearance.AppCompat.Toolbar.Title'> ... </style> <style name='TextAppearance_TitleBar_subTitle' parent='TextAppearance.AppCompat.Toolbar.Subtitle'> .... </style></resources>

2)、自定義toolbar 繼承 androidx.appcompat.widget.Toolbar

public class CustomToolBar extends Toolbar { private TextView mCenterTitle; private ImageView mCenterIcon; //中心icon private TextView mLeftText; private ImageButton mLeftIcon; private TextView mSettingText; private ImageButton mSettingIcon; public CustomToolBar(Context context) { super(context); } public CustomToolBar(Context context, AttributeSet attrs) { super(context, attrs); } public CustomToolBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setLeftText(@StringRes int id) { setLeftText(this.getContext().getText(id)); } public CustomToolBar setLeftText(CharSequence text) { Context context = this.getContext(); if (this.mLeftText == null) { this.mLeftText = new TextView(context); this.mLeftText.setGravity(Gravity.CENTER_VERTICAL); this.mLeftText.setSingleLine();// this.mLeftText.setEllipsize(TextUtils.TruncateAt.END); setLeftTextAppearance(getContext(), R.style.TextAppearance_TitleBar_subTitle); //textView in left// this.addMyView(this.mLeftText, Gravity.START); int i = dp2px(this, 16); this.addMyView(this.mLeftText, Gravity.START, 0, 0, i, 0, 48); } mLeftText.setText(text); return this; } public void setLeftTextAppearance(Context context, @StyleRes int resId) { if (this.mLeftText != null) { this.mLeftText.setTextAppearance(context, resId); } } public void setLeftTextColor(@ColorInt int color) { if (this.mLeftText != null) { this.mLeftText.setTextColor(color); } } public void setLeftTextOnClickListener(OnClickListener listener) { if (mLeftText != null) { mLeftText.setOnClickListener(listener); } } public CustomToolBar setLeftIcon(@DrawableRes int resId) { return setLeftIcon(ContextCompat.getDrawable(this.getContext(), resId)); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public CustomToolBar setLeftIcon(Drawable drawable) { Context context = this.getContext(); if (this.mLeftIcon == null) { this.mLeftIcon = new ImageButton(context); ... this.addMyView(this.mLeftIcon, Gravity.START); } else { if (mLeftIcon.getVisibility() != VISIBLE) { mLeftIcon.setVisibility(VISIBLE); } } if (mLeftText != null && mLeftText.getVisibility() != GONE) { mLeftText.setVisibility(GONE); } mLeftIcon.setImageDrawable(drawable); return this; } public void setLeftIconOnClickListener(OnClickListener listener) { if (mLeftIcon != null) { mLeftIcon.setOnClickListener(listener); } } public void setLeftIconVisibility(int visibility) { if (mLeftIcon != null) { mLeftIcon.setVisibility(visibility); } } public CustomToolBar setMyCenterTitle(@StringRes int id, boolean center) { return setMyCenterTitle(this.getContext().getText(id), center); } public void setMyCenterTitle(@StringRes int Rid) { setMyCenterTitle(this.getContext().getText(Rid)); } public void setMyCenterTitle(CharSequence text) { Context context = this.getContext(); if (this.mCenterTitle == null) { this.mCenterTitle = new TextView(context); ... } else { if (this.mCenterTitle.getVisibility() != VISIBLE) { mCenterTitle.setVisibility(VISIBLE); } } if (mCenterIcon != null && mCenterIcon.getVisibility() != GONE) { mCenterIcon.setVisibility(GONE); } ... } public CustomToolBar setMyCenterTitle(CharSequence text, boolean center) { Context context = this.getContext(); if (this.mCenterTitle == null) { this.mCenterTitle = new TextView(context); ... } else { if (this.mCenterTitle.getVisibility() != VISIBLE) { mCenterTitle.setVisibility(VISIBLE); } } if (mCenterIcon != null && mCenterIcon.getVisibility() != GONE) { mCenterIcon.setVisibility(GONE); } if (!center) { setTitle(text); setTitleTextColor(getResources().getColor(R.color.black)); } else { mCenterTitle.setText(text); mCenterTitle.setTextColor(getResources().getColor(R.color.black)); mCenterTitle.setTextSize(16); } return this; } public void setMyCenterTextAppearance(Context context, @StyleRes int resId) { if (this.mCenterTitle != null) { this.mCenterTitle.setTextAppearance(context, resId); } } public void setMyCenterTextColor(@ColorInt int color) { if (this.mCenterTitle != null) { this.mCenterTitle.setTextColor(color); } } public void setMyCenterTextOnClickListener(OnClickListener listener) { if (mCenterTitle != null) { mCenterTitle.setOnClickListener(listener); } } public void setMyCenterIcon(@DrawableRes int resId) { setMyCenterIcon(ContextCompat.getDrawable(this.getContext(), resId)); } public void setMyCenterIcon(Drawable drawable) { Context context = this.getContext(); if (this.mCenterIcon == null) { ... } else { if (mCenterIcon.getVisibility() != VISIBLE) { mCenterIcon.setVisibility(VISIBLE); } } if (mCenterTitle != null && mCenterTitle.getVisibility() != GONE) { mCenterTitle.setVisibility(GONE); } setTitle(''); mCenterIcon.setImageDrawable(drawable); } public void setMySettingText(@StringRes int Rid) { setMySettingText(this.getContext().getText(Rid)); } public void setMySettingText(CharSequence text) { Context context = this.getContext(); if (this.mSettingText == null) { ... } else { if (mSettingText.getVisibility() != VISIBLE) { mSettingText.setVisibility(VISIBLE); } } if (mSettingIcon != null && mSettingIcon.getVisibility() != GONE) { mSettingIcon.setVisibility(GONE); } mSettingText.setText(text); mSettingText.setTextSize(14); mSettingText.setTextColor(getResources().getColor(R.color.toolbar_title)); } public void setMySettingTextAppearance(Context context, @StyleRes int resId) { if (mSettingText != null) { mSettingText.setTextAppearance(context, resId); } } public void setMySettingTextColor(@ColorInt int color) { if (mSettingText != null) { mSettingText.setTextColor(color); } } public void setSettingTextOnClickListener(OnClickListener listener) { if (mSettingText != null) { mSettingText.setOnClickListener(listener); } } public CustomToolBar setMySettingIcon(@DrawableRes int resId) { return setMySettingIcon(ContextCompat.getDrawable(this.getContext(), resId));// ViewConfiguration.get(this.getContext()).getScaledTouchSlop(); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public CustomToolBar setMySettingIcon(Drawable drawable) { Context context = this.getContext(); if (this.mSettingIcon == null) { ... } else { if (mSettingIcon.getVisibility() != VISIBLE) { mSettingIcon.setVisibility(VISIBLE); } } if (mSettingText != null && mSettingText.getVisibility() != GONE) { mSettingText.setVisibility(GONE); } mSettingIcon.setImageDrawable(drawable); return this; } public void setSettingIconOnClickListener(OnClickListener listener) { if (mSettingIcon != null) { mSettingIcon.setOnClickListener(listener); } } private void addSimpleView(View v, int gravity) { addSimpleView(v, gravity, 0, 0, 0, 0); } private void addSimpleView(View v, int gravity, int left, int top, int right, int bottom) { LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, gravity); lp.setMargins(left, top, right, bottom); this.addView(v, lp); } private void addMyView(View v, int gravity) { addMyView(v, gravity, 0, 0, dp2px(this, 16), 0); } private void addMyView(View v, int gravity, int left, int top, int right, int bottom) { LayoutParams lp = new LayoutParams(dp2px(this, 20), dp2px(this, 20), gravity); lp.setMargins(left, top, right, bottom); this.addView(v, lp); } private void addMyView(View v, int gravity, int left, int top, int right, int bottom, int width) { LayoutParams lp = new LayoutParams(dp2px(this, width), 20, gravity); lp.setMargins(left, top, right, bottom); this.addView(v, lp); } public CustomToolBar setCenterTitleWithImg(CharSequence text, Drawable drawable, boolean center) { Context context = this.getContext(); if (this.mCenterTitle == null) { this.mCenterTitle = new TextView(context); ... if (this.mCenterTitle.getVisibility() != VISIBLE) { mCenterTitle.setVisibility(VISIBLE); } } if (this.mCenterIcon == null) { this.mCenterIcon = new ImageView(context); ... } else { if (mCenterIcon.getVisibility() != VISIBLE) { mCenterIcon.setVisibility(VISIBLE); } } mCenterTitle.setTextSize(18); mCenterTitle.setTextColor(getResources().getColor(R.color.black)); mCenterTitle.setText(text); mCenterIcon.setImageDrawable(drawable); return this; } public void setCenterTitleWithImgOnClickListener(OnClickListener listener) { if (mCenterTitle != null) { ((View) mCenterTitle.getParent()).setOnClickListener(listener); } }}

2、自定義Toolbar使用

1)、res/layout創建布局文件

<?xml version='1.0' encoding='utf-8'?><FrameLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' android:layout_width='match_parent' android:layout_height='wrap_content'> <com.ktx.view.CustomToolBar android: android:layout_width='match_parent' android:layout_height='?actionBarSize' android:background='@android:color/white' app:popupTheme='@style/ThemeOverlay.AppCompat.Light' app:titleTextColor='@android:color/black' /></FrameLayout>

2)、在布局中使用

<?xml version='1.0' encoding='utf-8'?><layout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:binding='http://schemas.android.com/tools'> <data> <variable name='viewModel' type='com.android.playandroid.viewmodel.LoginViewModel' /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width='match_parent' android:layout_height='match_parent' android:background='@color/bkg' android:orientation='vertical'> <include layout='@layout/title_layout' app:layout_constraintLeft_toLeftOf='parent' app:layout_constraintTop_toTopOf='parent' /> ... </androidx.constraintlayout.widget.ConstraintLayout></layout>

3)、代碼中使用

a、初始化:

mBinding.root.toolbar.setNavigationIcon(R.mipmap.register_close) mBinding.root.toolbar.setMyCenterTitle(getString(R.string.register), true) mBinding.root.toolbar.setMySettingText(getString(R.string.login))

b、點擊事件:

mBinding.root.toolbar.setNavigationOnClickListener { .... } mBinding.root.toolbar.setSettingTextOnClickListener { ...}

4)、沉浸式,設置toolbar背景顏色、文字顏色,一般寫在基類

protected open fun initImmersionBar() { //在BaseActivity里初始化 mImmersionBar = ImmersionBar.with(this) if (toolbar != null) { mImmersionBar.titleBar(toolbar) } mImmersionBar.statusBarDarkFont(true) // mImmersionBar.keyboardEnable(true).navigationBarWithKitkatEnable(false).init() // mImmersionBar.init()ImmersionBar.with(this).init() }

Google原生的效果,不必多說,可以實現類似這樣的效果

Android自定義ToolBar并實現沉浸式的方法

注意:

1、配置整個app的toolbar風格,在/value/styles.xml文件修改代碼

<style name='AppTheme' parent='Theme.AppCompat.Light.NoActionBar'> <item name='colorPrimary'>@android:color/white</item> <item name='colorPrimaryDark'>@android:color/white</item> <item name='colorAccent'>@android:color/white</item> ... </style>

2、修改了 toolbar的高度 ,怎么讓navigationIcon顯示在toolbar中心?

  只要設置如下,即可:android:minHeight='@dimen/toolbar_height'

3、toolbar布局文件位置

  如果在commonlibrary目錄創建該文件,在app 下還需要復制一份,因為在app 使用toolbar,kotlin-android-extensions引用不到commonlibrary目錄下的布局文件。

代碼Github:https://github.com/AlbertShen0211/PlayAndroid

總結

到此這篇關于Android自定義ToolBar并實現沉浸式的文章就介紹到這了,更多相關Android 自定義ToolBar并沉浸式內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲观看| 国产精品尤物| 亚洲永久av| 国内精品麻豆美女在线播放视频| 国产麻豆精品| 国产精品v一区二区三区| 天堂va欧美ⅴa亚洲va一国产| 日韩视频一区| 亚洲欧美日韩国产一区二区| 日本欧洲一区二区| 免费精品视频最新在线| 免费在线看一区| 亚洲不卡视频| 国产免费av国片精品草莓男男| 青青草91视频| 精品一区av| 日本美女一区| 蜜桃国内精品久久久久软件9| 五月综合激情| 亚洲视频国产精品| 欧美日韩一区二区三区不卡视频| 国产日韩亚洲欧美精品| 国产亚洲电影| 国产成人a视频高清在线观看| 日韩国产一区二区| 亚洲欧洲午夜| 久久国产尿小便嘘嘘| 激情久久一区二区| 日韩精品91| 99re国产精品| 日本少妇精品亚洲第一区| 国产欧美日韩亚洲一区二区三区| 国内精品麻豆美女在线播放视频| 亚洲电影在线一区二区三区| 日韩中文av| 97精品国产福利一区二区三区| 久久免费高清| 亚洲3区在线| 精品视频一区二区三区四区五区| 欧美日韩在线播放视频| 亚洲一区二区av| 激情中国色综合| 国产偷自视频区视频一区二区| 欧美一区二区三区久久| 日韩视频网站在线观看| 综合激情婷婷| 日韩成人精品一区二区| 蜜臀久久99精品久久久久宅男| 国产精品成人3p一区二区三区| 久久一区二区中文字幕| 亚洲ab电影| 日韩毛片视频| 日日夜夜免费精品视频| 日韩黄色大片| 日本午夜精品一区二区三区电影 | 午夜久久黄色| 欧美日韩国产一区二区在线观看| 蜜臀国产一区| 日本视频一区二区| 亚洲成人精品| 久久99影视| 久色成人在线| 蜜臀久久精品| 欧美亚洲三区| 久久国产欧美| 国产精品日韩精品中文字幕| 欧美1区免费| 美女视频网站久久| 中文一区一区三区免费在线观| 天堂8中文在线最新版在线| 亚洲理论在线| 亚洲不卡av不卡一区二区| 国产精品亚洲综合久久| 在线午夜精品| 亚洲天堂一区二区| 国产精品亚洲欧美| 免费日韩av片| 天堂日韩电影| 国精品产品一区| 日韩欧美高清一区二区三区| 久久中文字幕av| 国语精品一区| 91精品国产自产观看在线| 欧美日韩激情| 精品国产精品久久一区免费式| 日本在线成人| 亚洲深夜福利| 久久国产中文字幕| 精品视频在线一区二区在线| 日韩激情综合| 爽好久久久欧美精品| 日韩欧美少妇| 精品入口麻豆88视频| 欧美色综合网| 亚洲精品免费观看| 欧美日韩中文字幕一区二区三区| 大香伊人久久精品一区二区| 国产探花一区| 日韩黄色免费网站| 蜜桃久久av一区| 亚洲国产一区二区在线观看| 欧美aa在线观看| 亚洲综合电影| 中文字幕成在线观看| 精品日韩在线| 精品国产亚洲一区二区三区在线| 97久久超碰| 四虎成人精品一区二区免费网站 | 亚洲激情欧美| 激情综合自拍| 久久久久国产精品一区三寸| 中文字幕高清在线播放| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 在线午夜精品| 亚洲少妇在线| 欧美特黄a级高清免费大片a级| 天堂网av成人| 亚洲国产成人精品女人| 在线观看免费一区二区| 国产一区视频在线观看免费| 久久中文亚洲字幕| 午夜国产精品视频| 999在线观看精品免费不卡网站| 精品日韩毛片| 视频一区在线视频| 免费观看在线综合| 影音先锋久久精品| 日本午夜精品一区二区三区电影| 国产探花一区| 精品国产精品久久一区免费式| 精品久久精品| 欧美三区四区| 欧美日韩精品一本二本三本| 亚洲欧美日韩在线观看a三区| 男女男精品网站| 亚洲免费观看高清完整版在线观| 91久久精品无嫩草影院| 国产精品亚洲四区在线观看 | 日产精品一区| 黄色成人在线网址| 国产精品外国| 综合国产视频| 国产精品亚洲片在线播放| 国语对白精品一区二区| 日韩精品首页| 亚洲作爱视频| 欧美日韩1区| 国产一区一一区高清不卡| 亚洲精品国产嫩草在线观看| 久久美女精品| 亚洲综合中文| 国产精品亚洲综合色区韩国| 国产videos久久| 伊人精品一区| 亚洲香蕉久久| 精品午夜久久| 欧美香蕉视频| 亚洲婷婷丁香| 国产一区二区三区久久久久久久久| 中文在线中文资源| 国产亚洲欧洲| 91精品国产自产观看在线| 精品国产欧美日韩| 亚洲精品成人| 国产欧美一区二区三区米奇| 视频在线不卡免费观看| 激情五月色综合国产精品| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品777777在线播放 | 日韩国产精品久久久| 久久精品网址| 九九综合九九| 国产精品一线| 欧美丝袜一区| 清纯唯美亚洲综合一区| 国产精品国产三级国产在线观看| 亚洲激情中文在线| 国产欧美精品久久| 99视频精品全国免费| 日本91福利区| 91精品国产91久久久久久黑人| 香蕉久久久久久| 国产精品不卡| 香蕉成人久久| 国产成人久久精品一区二区三区| 免费日韩av片| 久久久久久一区二区| 免费久久精品视频| 国产日韩电影| 日韩二区三区在线观看| 日韩在线观看一区| 日本亚洲视频| 国产二区精品| 免费一级欧美片在线观看网站| 亚洲激情另类| 成人污污视频| 日韩成人av影视| 婷婷精品视频| 久久亚洲国产精品尤物| 免费人成网站在线观看欧美高清|