From 3649e7e310a39992ab3c84e2186982aeef3f2dd9 Mon Sep 17 00:00:00 2001 From: HuanCheng65 <609486518@qq.com> Date: Sun, 10 Apr 2022 10:09:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B9=B3=E6=9D=BF=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=8F=98=E4=B8=BA=E4=BE=A7=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tieba/post/activities/MainActivity.kt | 24 +++---- .../widgets/theme/TintNavigationRailView.java | 67 +++++++++++++++++++ .../main/res/layout-sw600dp/activity_main.xml | 26 +++++++ app/src/main/res/values/attrs.xml | 6 ++ 4 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/huanchengfly/tieba/post/widgets/theme/TintNavigationRailView.java create mode 100644 app/src/main/res/layout-sw600dp/activity_main.xml diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/MainActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/MainActivity.kt index 1654d2ba..67b27929 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/MainActivity.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/MainActivity.kt @@ -16,9 +16,8 @@ import android.widget.Toast import androidx.viewpager.widget.ViewPager.OnPageChangeListener import butterknife.BindView import com.google.android.material.bottomnavigation.BottomNavigationItemView -import com.google.android.material.bottomnavigation.BottomNavigationMenuView -import com.google.android.material.bottomnavigation.BottomNavigationView -import com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemReselectedListener +import com.google.android.material.navigation.NavigationBarMenuView +import com.google.android.material.navigation.NavigationBarView import com.google.android.material.snackbar.Snackbar import com.huanchengfly.tieba.post.* import com.huanchengfly.tieba.post.adapters.ViewPagerAdapter @@ -43,15 +42,16 @@ import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.* -open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemSelectedListener, OnNavigationItemReselectedListener { +open class MainActivity : BaseActivity(), NavigationBarView.OnItemSelectedListener, + NavigationBarView.OnItemReselectedListener { var mAdapter: ViewPagerAdapter = ViewPagerAdapter(supportFragmentManager) @BindView(R.id.mViewPager) lateinit var mViewPager: MyViewPager @BindView(R.id.navbar) - lateinit var mBottomNavigationView: BottomNavigationView - private var menuView: BottomNavigationMenuView? = null + lateinit var navigationView: NavigationBarView + private var menuView: NavigationBarMenuView? = null private var lastTime: Long = 0 private val navigationHelper: NavigationHelper = NavigationHelper.newInstance(this) @@ -68,7 +68,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS public override fun onResume() { super.onResume() ThemeUtil.setTranslucentThemeBackground(findViewById(R.id.background)) - mBottomNavigationView.elevation = if (ThemeUtil.isTranslucentTheme(this)) { + navigationView.elevation = if (ThemeUtil.isTranslucentTheme(this)) { 0f } else { 4f.dpToPxFloat() @@ -107,7 +107,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS } private fun findView() { - menuView = mBottomNavigationView.getChildAt(0) as BottomNavigationMenuView + menuView = navigationView.getChildAt(0) as NavigationBarMenuView } protected fun initView() { @@ -115,7 +115,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS val badge = layoutInflater.inflate(R.layout.layout_badge, hideExploreItemView, true) badgeTextView = badge.findViewById(R.id.tv_msg_count) if (hideExplore) { - mBottomNavigationView.menu.removeItem(R.id.navbar_explore) + navigationView.menu.removeItem(R.id.navbar_explore) } mAdapter.addFragment(MainForumListFragment()) if (!hideExplore) { @@ -130,8 +130,8 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS } private fun initListener() { - mBottomNavigationView.setOnNavigationItemSelectedListener(this) - mBottomNavigationView.setOnNavigationItemReselectedListener(this) + navigationView.setOnItemSelectedListener(this) + navigationView.setOnItemReselectedListener(this) mViewPager.addOnPageChangeListener(object : OnPageChangeListener { override fun onPageScrolled( position: Int, @@ -142,7 +142,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS @SuppressLint("RestrictedApi") override fun onPageSelected(position: Int) { - mBottomNavigationView.menu.getItem(position).isChecked = true + navigationView.menu.getItem(position).isChecked = true if (position == msgNavPosition) { badgeTextView!!.visibility = View.GONE } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/widgets/theme/TintNavigationRailView.java b/app/src/main/java/com/huanchengfly/tieba/post/widgets/theme/TintNavigationRailView.java new file mode 100644 index 00000000..6683ba69 --- /dev/null +++ b/app/src/main/java/com/huanchengfly/tieba/post/widgets/theme/TintNavigationRailView.java @@ -0,0 +1,67 @@ +package com.huanchengfly.tieba.post.widgets.theme; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.util.AttributeSet; + +import com.google.android.material.navigationrail.NavigationRailView; +import com.huanchengfly.tieba.post.R; +import com.huanchengfly.tieba.post.ui.theme.interfaces.Tintable; +import com.huanchengfly.tieba.post.ui.theme.utils.ColorStateListUtils; +import com.huanchengfly.tieba.post.ui.theme.utils.ThemeUtils; + +public class TintNavigationRailView extends NavigationRailView implements Tintable { + private int mBackgroundTintResId; + private int mItemIconTintResId; + private int mItemTextTintResId; + + public TintNavigationRailView(Context context) { + this(context, null); + } + + public TintNavigationRailView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + @SuppressLint("CustomViewStyleable") + public TintNavigationRailView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + if (isInEditMode()) { + return; + } + if (attrs == null) { + mBackgroundTintResId = R.color.transparent; + mItemIconTintResId = 0; + mItemTextTintResId = 0; + applyTintColor(); + return; + } + TypedArray array = getContext().obtainStyledAttributes(attrs, R.styleable.TintNavigationRailView, defStyleAttr, 0); + mBackgroundTintResId = array.getResourceId(R.styleable.TintNavigationRailView_backgroundTint, R.color.transparent); + mItemIconTintResId = array.getResourceId(R.styleable.TintNavigationRailView_itemIconTintList, 0); + mItemTextTintResId = array.getResourceId(R.styleable.TintNavigationRailView_itemTextTintList, 0); + array.recycle(); + applyTintColor(); + } + + private void applyTintColor() { + if (getBackground() == null) { + setBackgroundColor(ThemeUtils.getColorById(getContext(), mBackgroundTintResId)); + } else { + setBackgroundTintList(ColorStateList.valueOf(ThemeUtils.getColorById(getContext(), mBackgroundTintResId))); + } + if (mItemIconTintResId != 0) { + setItemIconTintList(ColorStateListUtils.createColorStateList(getContext(), mItemIconTintResId)); + } + if (mItemTextTintResId != 0) { + setItemTextColor(ColorStateListUtils.createColorStateList(getContext(), mItemTextTintResId)); + } + } + + @Override + public void tint() { + applyTintColor(); + } +} diff --git a/app/src/main/res/layout-sw600dp/activity_main.xml b/app/src/main/res/layout-sw600dp/activity_main.xml new file mode 100644 index 00000000..7a453ad8 --- /dev/null +++ b/app/src/main/res/layout-sw600dp/activity_main.xml @@ -0,0 +1,26 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index d07a1b5f..9280e4f4 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -87,6 +87,12 @@ + + + + + +