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 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
}

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" />
</declare-styleable>
<declare-styleable name="TintNavigationRailView">
<attr name="backgroundTint" />
<attr name="itemIconTintList" />
<attr name="itemTextTintList" />
</declare-styleable>
<declare-styleable name="TintToolbar">
<attr name="toolbarBackgroundTint" format="color" />
<attr name="itemTint" format="color" />