成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:2日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品影视网| 精品一区二区久久| 亚洲在线观看免费| 久久精品亚洲麻豆av一区二区 | 国产精品蜜臀av| 国产乱子伦视频一区二区三区 | 亚洲美女区一区| 麻豆精品一区二区av白丝在线| 国产精品社区| 欧美成人欧美edvon| 石原莉奈在线亚洲二区| 狠狠色狠狠色综合日日tαg| 欧美一三区三区四区免费在线看| 看电视剧不卡顿的网站| 日韩午夜视频在线观看| 2欧美一区二区三区在线观看视频| 日韩中文字幕麻豆| 日韩亚洲国产精品| 亚洲欧洲av一区二区三区久久| 成人黄色在线网站| 欧洲生活片亚洲生活在线观看| 亚洲精品亚洲人成人网在线播放| 日韩二区三区四区| 日本道精品一区二区三区| 国产精品久久99| 99在线精品视频| 在线不卡中文字幕播放| 亚洲三级电影网站| 最新成人av网站| 国产精品久久久久久久久动漫| 91在线观看地址| 日韩欧美三级在线| 欧美激情中文字幕| 欧美福利专区| 欧美大片国产精品| 先锋影音国产一区| 在线观看一区| 精品久久久久99| 成人午夜在线视频| 4438x亚洲最大成人网| 蜜臀av性久久久久蜜臀aⅴ| 久久亚洲欧洲| 理论片日本一区| 91精品久久久久久久99蜜桃 | 亚洲伊人色欲综合网| 亚洲专区免费| 美女诱惑一区二区| 在线观看91av| av中文字幕一区| 国产精品国产a级| 国产精品夜夜夜| 美女在线视频一区| 日韩一级二级三级| 91美女片黄在线| **网站欧美大片在线观看| 国产亚洲一区在线| 奇米精品一区二区三区在线观看一| 欧美精品久久99久久在免费线| 高清不卡在线观看av| 久久伊人蜜桃av一区二区| 狠狠88综合久久久久综合网| 亚洲成人先锋电影| 欧美久久一二三四区| zzijzzij亚洲日本少妇熟睡| 中文字幕一区av| 久久先锋影音| 国产99久久久国产精品免费看| 国产精品国产成人国产三级| 亚洲在线免费| 国产精品一区免费在线观看| 欧美国产乱子伦| 久久久999| 国产精品996| 亚洲视频网在线直播| 91高清视频免费看| 99久久精品国产一区二区三区| 亚洲精品视频一区| 欧美日韩第一区日日骚| 欧美国产综合| 五月婷婷综合网| 日韩欧美国产电影| 亚洲经典视频在线观看| 视频一区视频二区在线观看| 欧美一区二区三区视频在线 | 国产成人av一区二区三区在线观看| 欧美国产精品v| 久久久久欧美精品| 99这里只有久久精品视频| 亚洲午夜久久久久久久久久久| 在线播放日韩导航| av成人天堂| 国产精品自拍毛片| 中文字幕日韩一区| 欧美日韩亚洲不卡| 好吊色欧美一区二区三区视频| 日韩 欧美一区二区三区| 2024国产精品| 久久免费一区| 牛牛国产精品| 蜜桃视频在线观看一区二区| 国产色爱av资源综合区| 色婷婷精品大视频在线蜜桃视频| 91亚洲精品久久久蜜桃网站| 五月天激情综合| 久久久久九九视频| 91福利在线免费观看| 欧美日韩国产免费观看| 久久99热99| 日韩美女精品在线| 日韩欧美中文一区| 欧美一级一区| 欧美国产专区| 精品一区二区日韩| 亚洲码国产岛国毛片在线| 精品日韩在线观看| 一本久久a久久免费精品不卡| 国产精品国产亚洲精品看不卡15 | 亚洲欧洲韩国日本视频| 日韩欧美亚洲一区二区| 欧美中文字幕| 欧美日本国产| 黄网站免费久久| 亚洲一区中文在线| 国产亚洲一区二区三区在线观看| 欧美日韩国产大片| 国产精品美女黄网| 成人av在线观| 久久激情综合网| 亚洲午夜精品网| 欧美精品一区二区三区久久久| 久久精彩视频| 亚洲国产精品第一区二区| 成人激情图片网| 久久成人久久鬼色| 五月天激情小说综合| 亚洲欧洲日产国码二区| 日韩免费观看高清完整版在线观看| 日本道色综合久久| 亚洲尤物在线| 亚洲三级视频| 欧美片网站免费| 94-欧美-setu| 丁香激情综合国产| 国产精品一区二区久久精品爱涩| 视频一区中文字幕| 亚洲尤物在线视频观看| 国产精品短视频| 久久久精品天堂| 精品久久国产97色综合| 在线综合视频播放| 欧美怡红院视频| 亚洲综合欧美| 国产欧美一区二区视频| 国产精品大片| 欧美国产精品| 欧美国产综合| 欧美一区激情视频在线观看| 99视频热这里只有精品免费| 成人免费毛片a| 成人av网在线| a亚洲天堂av| 成人av第一页| 成人午夜免费电影| 丁香啪啪综合成人亚洲小说| 国产乱码精品一区二区三区av| 麻豆极品一区二区三区| 日韩中文欧美在线| 午夜精品福利久久久| 亚洲成国产人片在线观看| 亚洲国产欧美在线| 亚洲国产成人av网| 亚洲一区二区在线播放相泽| 夜夜嗨av一区二区三区| 一区二区三区日韩在线观看| 亚洲欧美日韩久久精品| 亚洲女人的天堂| 亚洲精品水蜜桃| 一区二区三区在线观看视频| 亚洲最大的成人av| 亚洲成av人片一区二区三区| 亚洲高清视频在线| 午夜一区二区三区视频| 午夜视频在线观看一区二区| 亚洲午夜激情网站| 日韩国产高清在线| 久久国产精品区| 久久99久久久久久久久久久| 久久av中文字幕片| 国产福利精品一区二区| 成人午夜在线视频| 欧美在线网站| 在线成人h网| 亚洲主播在线| 欧美这里有精品| 制服丝袜亚洲色图| 精品美女被调教视频大全网站| 欧美精品一区二区三区在线| 国产欧美一区视频| 一区二区三区在线免费| 天天综合色天天|