improved tab multi columns

This commit is contained in:
Mariotaku Lee 2017-01-23 22:26:29 +08:00
parent 184623fd0e
commit 74ff9c4082
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
9 changed files with 19 additions and 44 deletions

View File

@ -105,6 +105,11 @@ public class TabPagerIndicator extends RecyclerView implements PagerIndicator, C
return mIndicatorAdapter.getItemContext();
}
public int getColumns() {
if (mColumns > 0) return mColumns;
return 1;
}
public void setColumns(int columns) {
mColumns = columns;
notifyDataSetChanged();
@ -307,11 +312,6 @@ public class TabPagerIndicator extends RecyclerView implements PagerIndicator, C
return position >= current && position < current + columns;
}
private int getColumns() {
if (mColumns > 0) return mColumns;
return 1;
}
public static class Appearance implements ChameleonView.Appearance {
@ColorInt
int iconColor, labelColor, stripColor;

View File

@ -100,8 +100,6 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
private val accountUpdatedListener = AccountUpdatedListener(this)
private var selectedAccountToSearch: AccountDetails? = null
private var tabColumns: Int = 0
private lateinit var multiSelectHandler: MultiSelectEventHandler
@ -334,8 +332,6 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
val refreshOnStart = preferences.getBoolean(SharedPreferenceConstants.KEY_REFRESH_ON_START, false)
var tabDisplayOptionInt = Utils.getTabDisplayOptionInt(this)
tabColumns = resources.getInteger(R.integer.default_tab_columns)
drawerToggle = ActionBarDrawerToggle(this, homeMenu, R.string.open_accounts_dashboard,
R.string.close_accounts_dashboard)
homeContent.setOnFitSystemWindowsListener(this)
@ -343,7 +339,6 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
mainPager.adapter = pagerAdapter
mainTabs.setViewPager(mainPager)
mainTabs.setOnPageChangeListener(this)
mainTabs.setColumns(tabColumns)
if (tabDisplayOptionInt == 0) {
tabDisplayOptionInt = TabPagerIndicator.DisplayOption.ICON
}
@ -561,7 +556,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
}
override fun getControlBarOffset(): Float {
if (tabColumns > 1) {
if (mainTabs.columns > 1) {
val lp = actionsButton.layoutParams
val total: Float
if (lp is MarginLayoutParams) {
@ -576,7 +571,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
}
override fun setControlBarOffset(offset: Float) {
val translationY = if (tabColumns > 1) 0 else (controlBarHeight * (offset - 1)).toInt()
val translationY = if (mainTabs.columns > 1) 0 else (controlBarHeight * (offset - 1)).toInt()
toolbar.translationY = translationY.toFloat()
windowOverlay.translationY = translationY.toFloat()
val lp = actionsButton.layoutParams
@ -795,14 +790,16 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
val hasNoTab = pagerAdapter.count == 0
emptyTabHint.visibility = if (hasNoTab) View.VISIBLE else View.GONE
mainPager.visibility = if (hasNoTab) View.GONE else View.VISIBLE
if (resources.getBoolean(R.bool.home_tab_has_multiple_columns)) {
if (pagerAdapter.count > 1 && resources.getBoolean(R.bool.home_tab_has_multiple_columns)) {
mainPager.pageMargin = resources.getDimensionPixelOffset(R.dimen.home_page_margin)
mainPager.setPageMarginDrawable(ThemeUtils.getDrawableFromThemeAttribute(this, R.attr.dividerVertical))
pagerAdapter.hasMultipleColumns = true
mainTabs.columns = Math.floor(1.0 / pagerAdapter.getPageWidth(0)).toInt()
} else {
mainPager.pageMargin = 0
mainPager.setPageMarginDrawable(null)
pagerAdapter.hasMultipleColumns = false
mainTabs.columns = 1
}
}

View File

@ -94,9 +94,17 @@ class SupportTabsAdapter @JvmOverloads constructor(
}
override fun getPageWidth(position: Int): Float {
val columnCount = count
if (columnCount == 0) return 1f
if (hasMultipleColumns) {
val resources = context.resources
return resources.getDimension(R.dimen.preferred_tab_column_width) / resources.displayMetrics.widthPixels
val screenWidth = resources.displayMetrics.widthPixels
val preferredColumnWidth = resources.getDimension(R.dimen.preferred_tab_column_width)
val pageWidth = preferredColumnWidth / screenWidth
if (columnCount * preferredColumnWidth < screenWidth) {
return 1f / columnCount
}
return pageWidth
}
return 1f
}

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Twidere - Twitter client for Android
~
~ Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<integer name="default_tab_columns">3</integer>
</resources>

View File

@ -3,6 +3,5 @@
<integer name="nyan_star_rows">8</integer>
<integer name="nyan_star_cols">23</integer>
<integer name="default_multi_column_list_count">2</integer>
</resources>

View File

@ -3,6 +3,5 @@
<integer name="nyan_star_rows">13</integer>
<integer name="nyan_star_cols">31</integer>
<integer name="default_multi_column_list_count">3</integer>
</resources>

View File

@ -4,7 +4,6 @@
<integer name="nyan_star_rows">15</integer>
<integer name="nyan_star_cols">19</integer>
<integer name="unread_count_text_size">12</integer>
<integer name="default_multi_column_list_count">2</integer>
<integer name="theme_preview_pane_space_weight">2</integer>
<integer name="default_live_wallpaper_scale">3</integer>
<integer name="staggered_grid_columns_port">2</integer>

View File

@ -4,7 +4,6 @@
<string name="default_tab_display_option">icon</string>
<string name="profile_image_size">normal</string>
<string name="default_profile_image_style">round</string>
<integer name="default_tab_columns">1</integer>
<integer name="min_database_item_limit">50</integer>
</resources>

View File

@ -6,7 +6,6 @@
<integer name="nyan_star_rows">8</integer>
<integer name="nyan_star_cols">11</integer>
<integer name="unread_count_text_size">10</integer>
<integer name="default_multi_column_list_count">1</integer>
<integer name="max_action_buttons">2</integer>
<integer name="max_action_buttons_bottom">4</integer>
<integer name="activity_anim_time">@android:integer/config_shortAnimTime</integer>