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

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

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

瀏覽:69日期: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久久,三上悠亚国产精品一区二区三区
视频一区欧美精品| 日本91福利区| 精品久久久亚洲| 国产精品a级| 你懂的亚洲视频| 日韩有吗在线观看| 中文字幕中文字幕精品| 日韩精品一级| 国产精品巨作av| 精品国产亚洲一区二区在线观看| 国产一区二区亚洲| 久久激情婷婷| 色88888久久久久久影院| 日韩伦理一区| 日韩av一级| 亚洲欧美日本日韩| 国产日韩欧美中文在线| 国产麻豆久久| 日精品一区二区三区| 国产伦精品一区二区三区视频| 日本午夜精品| 亚洲手机在线| 国产一区二区三区四区五区传媒| 激情五月综合网| 亚洲视频电影在线| 国产精品亚洲人成在99www| 日韩av一级片| 精品国产网站| 久久精品国产在热久久| 国产婷婷精品| 国产欧美日韩一区二区三区四区| 国产毛片精品| 欧美一级鲁丝片| 精品91久久久久| 日韩久久一区| 国产精品一卡| 国产99久久| 综合精品一区| 日日夜夜免费精品视频| 天使萌一区二区三区免费观看| 久久久影院免费| 老司机精品视频在线播放| 国产精品尤物| 亚洲资源网站| 亚洲国产专区校园欧美| 国产精品毛片视频| 亚洲综合三区| 中文字幕av亚洲精品一部二部| 国产探花在线精品| 亚洲午夜91| 男人天堂欧美日韩| 精品香蕉视频| 羞羞答答国产精品www一本| 国产精品流白浆在线观看| 激情久久中文字幕| 国产精品毛片aⅴ一区二区三区| 欧美日韩精品在线一区| 国产欧美丝祙| 欧美综合国产| 韩国久久久久久| 日韩国产精品久久久久久亚洲| 日韩欧美一区二区三区在线视频| 青青在线精品| 在线精品小视频| 日韩在线观看一区| 亚洲国产不卡| 一二三区精品| 精品视频在线观看网站| 国产成人久久精品麻豆二区| 国产一区三区在线播放| 亚洲精品国产嫩草在线观看 | 麻豆91精品视频| 在线视频观看日韩| 九色porny丨国产首页在线| 日韩免费福利视频| 国产精品99在线观看| 美女久久久久| 国产视频一区三区| 精品美女在线视频| 好看的av在线不卡观看| 亚洲97av| 亚洲一区二区毛片| 欧美片第1页综合| 欧美69视频| 国产区精品区| 韩日一区二区三区| 国产成人精品999在线观看| 国产精品99久久免费观看| 国产精品夜夜夜| 麻豆精品在线| 国产精品调教视频| 另类综合日韩欧美亚洲| 国产日产一区| 中文字幕一区二区三区在线视频| 日韩国产在线| 国产精品视频一区二区三区四蜜臂 | 亚洲一级网站| 国产精品视频一区二区三区综合| 99视频一区| 欧美三区不卡| 欧美日韩国产精品一区二区亚洲| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩视频一区| 日韩不卡一区| 日韩国产在线观看一区| 99xxxx成人网| 欧美 日韩 国产一区二区在线视频 | 91精品1区| 欧美亚洲人成在线| 好看的亚洲午夜视频在线| 亚洲高清激情| 人人精品亚洲| 日韩大片在线播放| 国产精品蜜芽在线观看| 国产精品二区不卡| 日韩成人精品一区二区| 国精品产品一区| 欧美日韩精品一区二区三区在线观看| 蜜臀91精品一区二区三区| 成人片免费看| 97成人在线| 亚洲精品少妇| 91成人精品在线| 亚洲精品1区| 国产亚洲人成a在线v网站| 日本aⅴ免费视频一区二区三区| 日韩影院免费视频| 亚洲成a人片| 亚洲欧美久久久| 9国产精品视频| 蜜臀久久99精品久久久久久9 | 男女性色大片免费观看一区二区 | 久久国产精品免费一区二区三区| 欧美日韩99| 国产精品第十页| 国产粉嫩在线观看| 成人日韩在线观看| 自拍日韩欧美| 亚洲作爱视频| 亚洲1区在线| 国产精品日本一区二区三区在线| 你懂的国产精品永久在线| 国际精品欧美精品| 成人久久一区| 快she精品国产999| 国产日韩一区| 日韩av在线播放网址| 成人av二区| 中文字幕乱码亚洲无线精品一区| 日韩av中文在线观看| 欧美aa在线视频| 蜜桃精品在线| 亚洲精品美女| 国产精品久久乐| 高清不卡亚洲| 先锋影音久久久| 国产精品资源| 亚洲黄色影院| 成人羞羞在线观看网站| 综合激情网...| 免费一级欧美在线观看视频| 亚洲免费观看| 中文字幕在线视频久| 国产欧美午夜| 亚洲欧洲日韩| 欧美天堂视频| 精品久久久久久久| 国产日韩欧美一区在线| 99tv成人| 国产精品亚洲综合久久| 亚洲精品福利| 性色一区二区| 亚洲午夜天堂| 99精品综合| 欧美~级网站不卡| 高清不卡亚洲| 国产精品毛片久久| 欧美 日韩 国产一区二区在线视频| 久久xxxx精品视频| 久久不见久久见中文字幕免费| 九九精品调教| 日韩av中文在线观看| 美女福利一区二区三区| 蜜臀a∨国产成人精品| 国产精品毛片aⅴ一区二区三区| 亚洲1234区| 日本91福利区| 免费日韩精品中文字幕视频在线| 91精品国产福利在线观看麻豆| 色婷婷亚洲mv天堂mv在影片| 国产精品原创| 久久视频精品| 国产日韩1区| 日韩精品1区2区3区| 国产亚洲一区二区三区啪| 日韩三级久久| 欧美日本不卡| 日本一区二区高清不卡| 99成人在线| 人人精品亚洲|