feat: 平板首页变为侧栏

This commit is contained in:
HuanCheng65 2022-04-10 10:09:20 +08:00
parent 310ed1dbae
commit 3649e7e310
4 changed files with 111 additions and 12 deletions

View File

@ -16,9 +16,8 @@ import android.widget.Toast
import androidx.viewpager.widget.ViewPager.OnPageChangeListener import androidx.viewpager.widget.ViewPager.OnPageChangeListener
import butterknife.BindView import butterknife.BindView
import com.google.android.material.bottomnavigation.BottomNavigationItemView import com.google.android.material.bottomnavigation.BottomNavigationItemView
import com.google.android.material.bottomnavigation.BottomNavigationMenuView import com.google.android.material.navigation.NavigationBarMenuView
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemReselectedListener
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.huanchengfly.tieba.post.* import com.huanchengfly.tieba.post.*
import com.huanchengfly.tieba.post.adapters.ViewPagerAdapter import com.huanchengfly.tieba.post.adapters.ViewPagerAdapter
@ -43,15 +42,16 @@ import kotlinx.coroutines.launch
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemSelectedListener, OnNavigationItemReselectedListener { open class MainActivity : BaseActivity(), NavigationBarView.OnItemSelectedListener,
NavigationBarView.OnItemReselectedListener {
var mAdapter: ViewPagerAdapter = ViewPagerAdapter(supportFragmentManager) var mAdapter: ViewPagerAdapter = ViewPagerAdapter(supportFragmentManager)
@BindView(R.id.mViewPager) @BindView(R.id.mViewPager)
lateinit var mViewPager: MyViewPager lateinit var mViewPager: MyViewPager
@BindView(R.id.navbar) @BindView(R.id.navbar)
lateinit var mBottomNavigationView: BottomNavigationView lateinit var navigationView: NavigationBarView
private var menuView: BottomNavigationMenuView? = null private var menuView: NavigationBarMenuView? = null
private var lastTime: Long = 0 private var lastTime: Long = 0
private val navigationHelper: NavigationHelper = NavigationHelper.newInstance(this) private val navigationHelper: NavigationHelper = NavigationHelper.newInstance(this)
@ -68,7 +68,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS
public override fun onResume() { public override fun onResume() {
super.onResume() super.onResume()
ThemeUtil.setTranslucentThemeBackground(findViewById(R.id.background)) ThemeUtil.setTranslucentThemeBackground(findViewById(R.id.background))
mBottomNavigationView.elevation = if (ThemeUtil.isTranslucentTheme(this)) { navigationView.elevation = if (ThemeUtil.isTranslucentTheme(this)) {
0f 0f
} else { } else {
4f.dpToPxFloat() 4f.dpToPxFloat()
@ -107,7 +107,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS
} }
private fun findView() { private fun findView() {
menuView = mBottomNavigationView.getChildAt(0) as BottomNavigationMenuView menuView = navigationView.getChildAt(0) as NavigationBarMenuView
} }
protected fun initView() { protected fun initView() {
@ -115,7 +115,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS
val badge = layoutInflater.inflate(R.layout.layout_badge, hideExploreItemView, true) val badge = layoutInflater.inflate(R.layout.layout_badge, hideExploreItemView, true)
badgeTextView = badge.findViewById(R.id.tv_msg_count) badgeTextView = badge.findViewById(R.id.tv_msg_count)
if (hideExplore) { if (hideExplore) {
mBottomNavigationView.menu.removeItem(R.id.navbar_explore) navigationView.menu.removeItem(R.id.navbar_explore)
} }
mAdapter.addFragment(MainForumListFragment()) mAdapter.addFragment(MainForumListFragment())
if (!hideExplore) { if (!hideExplore) {
@ -130,8 +130,8 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS
} }
private fun initListener() { private fun initListener() {
mBottomNavigationView.setOnNavigationItemSelectedListener(this) navigationView.setOnItemSelectedListener(this)
mBottomNavigationView.setOnNavigationItemReselectedListener(this) navigationView.setOnItemReselectedListener(this)
mViewPager.addOnPageChangeListener(object : OnPageChangeListener { mViewPager.addOnPageChangeListener(object : OnPageChangeListener {
override fun onPageScrolled( override fun onPageScrolled(
position: Int, position: Int,
@ -142,7 +142,7 @@ open class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemS
@SuppressLint("RestrictedApi") @SuppressLint("RestrictedApi")
override fun onPageSelected(position: Int) { override fun onPageSelected(position: Int) {
mBottomNavigationView.menu.getItem(position).isChecked = true navigationView.menu.getItem(position).isChecked = true
if (position == msgNavPosition) { if (position == msgNavPosition) {
badgeTextView!!.visibility = View.GONE badgeTextView!!.visibility = View.GONE
} }

View File

@ -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();
}
}

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<com.huanchengfly.tieba.post.widgets.theme.TintCoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/background"
app:backgroundTint="@color/default_color_window_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.MainActivity">
<com.huanchengfly.tieba.post.widgets.theme.TintNavigationRailView
android:id="@+id/navbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:bottomNavigationBackgroundTint="@color/default_color_nav"
app:elevation="4dp"
app:itemIconTintList="@color/bottom_item_icon_tint_list"
app:itemTextTintList="@color/bottom_item_icon_tint_list"
app:labelVisibilityMode="unlabeled"
app:menu="@menu/navbar_main" />
<com.huanchengfly.tieba.post.widgets.MyViewPager
android:id="@+id/mViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.huanchengfly.tieba.post.widgets.theme.TintCoordinatorLayout>

View File

@ -87,6 +87,12 @@
<attr name="itemTextTintList" format="color" /> <attr name="itemTextTintList" format="color" />
</declare-styleable> </declare-styleable>
<declare-styleable name="TintNavigationRailView">
<attr name="backgroundTint" />
<attr name="itemIconTintList" />
<attr name="itemTextTintList" />
</declare-styleable>
<declare-styleable name="TintToolbar"> <declare-styleable name="TintToolbar">
<attr name="toolbarBackgroundTint" format="color" /> <attr name="toolbarBackgroundTint" format="color" />
<attr name="itemTint" format="color" /> <attr name="itemTint" format="color" />