mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-07 15:28:51 +01:00
fixed tab measurement
This commit is contained in:
parent
2caf013b20
commit
33eecaf954
@ -26,14 +26,19 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.TypedArray;
|
||||
import android.database.ContentObserver;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
@ -43,6 +48,7 @@ import android.support.v4.view.ViewPager.OnPageChangeListener;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.support.v4.widget.DrawerLayoutAccessor;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.ActionBarDrawerToggle;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.SparseIntArray;
|
||||
@ -55,6 +61,7 @@ import android.view.View.OnLongClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewGroup.MarginLayoutParams;
|
||||
import android.view.Window;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
@ -105,24 +112,24 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
private final ContentObserver mAccountChangeObserver = new AccountChangeObserver(this, mHandler);
|
||||
|
||||
private ParcelableAccount mSelectedAccountToSearch;
|
||||
private int mTabColumns;
|
||||
|
||||
|
||||
private MultiSelectEventHandler mMultiSelectHandler;
|
||||
|
||||
private SupportTabsAdapter mPagerAdapter;
|
||||
|
||||
private ExtendedViewPager mViewPager;
|
||||
private Toolbar mActionBar;
|
||||
private Toolbar mToolbar;
|
||||
private View mWindowOverlay;
|
||||
private TabPagerIndicator mTabIndicator;
|
||||
private DrawerLayout mDrawerLayout;
|
||||
private View mEmptyTabHint;
|
||||
private FloatingActionButton mActionsButton;
|
||||
private ExtendedRelativeLayout mHomeContent;
|
||||
private ImageButton mDrawerToggleButton;
|
||||
|
||||
|
||||
private UpdateUnreadCountTask mUpdateUnreadCountTask;
|
||||
|
||||
|
||||
private OnSharedPreferenceChangeListener mReadStateChangeListener = new OnSharedPreferenceChangeListener() {
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
@ -130,7 +137,38 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
}
|
||||
};
|
||||
private ControlBarShowHideHelper mControlBarShowHideHelper = new ControlBarShowHideHelper(this);
|
||||
private int mTabColumns;
|
||||
private ActionBarDrawerToggle mDrawerToggle;
|
||||
private ActionBarDrawerToggle.Delegate mHomeDrawerToggleDelegate = new ActionBarDrawerToggle.Delegate() {
|
||||
@Override
|
||||
public void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes) {
|
||||
mDrawerToggleButton.setImageDrawable(upDrawable);
|
||||
mDrawerToggleButton.setContentDescription(getString(contentDescRes));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setActionBarDescription(@StringRes int contentDescRes) {
|
||||
mDrawerToggleButton.setContentDescription(getString(contentDescRes));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable getThemeUpIndicator() {
|
||||
final int[] attrs = {android.support.v7.appcompat.R.attr.homeAsUpIndicator};
|
||||
final TypedArray a = obtainStyledAttributes(attrs);
|
||||
final Drawable result = a.getDrawable(0);
|
||||
a.recycle();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Context getActionBarThemedContext() {
|
||||
return mToolbar.getContext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNavigationVisible() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
public void closeAccountsDrawer() {
|
||||
if (mDrawerLayout == null) return;
|
||||
@ -189,6 +227,9 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
if (mDrawerToggle.onOptionsItemSelected(item)) {
|
||||
return true;
|
||||
}
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home: {
|
||||
final FragmentManager fm = getSupportFragmentManager();
|
||||
@ -334,7 +375,7 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
supportRequestWindowFeature(AppCompatDelegate.FEATURE_ACTION_MODE_OVERLAY);
|
||||
setContentView(R.layout.activity_home);
|
||||
|
||||
setSupportActionBar(mActionBar);
|
||||
setSupportActionBar(mToolbar);
|
||||
|
||||
ThemeUtils.setCompatContentViewOverlay(getWindow(), new EmptyDrawable());
|
||||
|
||||
@ -343,6 +384,8 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
|
||||
mTabColumns = getResources().getInteger(R.integer.default_tab_columns);
|
||||
|
||||
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open_accounts_dashboard,
|
||||
R.string.close_accounts_dashboard);
|
||||
mHomeContent.setOnFitSystemWindowsListener(this);
|
||||
mPagerAdapter = new SupportTabsAdapter(this, getSupportFragmentManager(), mTabIndicator, mTabColumns);
|
||||
mViewPager.setAdapter(mPagerAdapter);
|
||||
@ -371,6 +414,7 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
|
||||
mActionsButton.setOnClickListener(this);
|
||||
mActionsButton.setOnLongClickListener(this);
|
||||
mDrawerToggleButton.setOnClickListener(this);
|
||||
mEmptyTabHint.setOnClickListener(this);
|
||||
|
||||
setupSlidingMenu();
|
||||
@ -466,6 +510,14 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
startActivityForResult(intent, REQUEST_SETTINGS);
|
||||
break;
|
||||
}
|
||||
case R.id.drawer_toggle: {
|
||||
if (mDrawerLayout.isDrawerOpen(GravityCompat.START) || mDrawerLayout.isDrawerOpen(GravityCompat.END)) {
|
||||
mDrawerLayout.closeDrawers();
|
||||
} else {
|
||||
mDrawerLayout.openDrawer(GravityCompat.START);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -557,6 +609,20 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
// Sync the toggle state after onRestoreInstanceState has occurred.
|
||||
mDrawerToggle.syncState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
// Pass any configuration change to the drawer toggle
|
||||
mDrawerToggle.onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getControlBarOffset() {
|
||||
if (mTabColumns > 1) {
|
||||
@ -570,7 +636,7 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
return 1 - mActionsButton.getTranslationY() / total;
|
||||
}
|
||||
final float totalHeight = getControlBarHeight();
|
||||
return 1 + mActionBar.getTranslationY() / totalHeight;
|
||||
return 1 + mToolbar.getTranslationY() / totalHeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -578,7 +644,7 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar == null) return;
|
||||
final int translationY = mTabColumns > 1 ? 0 : (int) (getControlBarHeight() * (offset - 1));
|
||||
mActionBar.setTranslationY(translationY);
|
||||
mToolbar.setTranslationY(translationY);
|
||||
mWindowOverlay.setTranslationY(translationY);
|
||||
final ViewGroup.LayoutParams lp = mActionsButton.getLayoutParams();
|
||||
if (lp instanceof MarginLayoutParams) {
|
||||
@ -593,13 +659,48 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
public void onContentChanged() {
|
||||
super.onContentChanged();
|
||||
mTabIndicator = (TabPagerIndicator) findViewById(R.id.main_tabs);
|
||||
mActionBar = (Toolbar) findViewById(R.id.action_bar);
|
||||
mToolbar = (Toolbar) findViewById(R.id.action_bar);
|
||||
mDrawerLayout = (DrawerLayout) findViewById(R.id.home_menu);
|
||||
mViewPager = (ExtendedViewPager) findViewById(R.id.main_pager);
|
||||
mEmptyTabHint = findViewById(R.id.empty_tab_hint);
|
||||
mActionsButton = (FloatingActionButton) findViewById(R.id.actions_button);
|
||||
mHomeContent = (ExtendedRelativeLayout) findViewById(R.id.home_content);
|
||||
mWindowOverlay = findViewById(R.id.window_overlay);
|
||||
mDrawerToggleButton = (ImageButton) findViewById(R.id.drawer_toggle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerSlide(View drawerView, float slideOffset) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View drawerView) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerStateChanged(int newState) {
|
||||
final Fragment fragment = getLeftDrawerFragment();
|
||||
if (fragment instanceof AccountsDashboardFragment) {
|
||||
((AccountsDashboardFragment) fragment).loadAccounts();
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ActionBarDrawerToggle.Delegate getDrawerToggleDelegate() {
|
||||
return mHomeDrawerToggleDelegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getControlBarHeight() {
|
||||
return mTabIndicator.getHeight() - mTabIndicator.getStripHeight();
|
||||
}
|
||||
|
||||
private Fragment getKeyboardShortcutRecipient() {
|
||||
@ -612,11 +713,6 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getControlBarHeight() {
|
||||
return mTabIndicator.getHeight() - mTabIndicator.getStripHeight();
|
||||
}
|
||||
|
||||
private boolean handleFragmentKeyboardShortcutRepeat(final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, final int repeatCount,
|
||||
@NonNull final KeyEvent event, int metaState) {
|
||||
@ -757,6 +853,7 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
|
||||
private void setupSlidingMenu() {
|
||||
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_start, GravityCompat.START);
|
||||
mDrawerLayout.addDrawerListener(mDrawerToggle);
|
||||
mDrawerLayout.addDrawerListener(this);
|
||||
final Window window = getWindow();
|
||||
ThemeUtils.applyWindowBackground(this, mHomeContent,
|
||||
@ -815,29 +912,6 @@ public class HomeActivity extends BaseActivity implements OnClickListener, OnPag
|
||||
mActionsButton.setContentDescription(getString(title));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerSlide(View drawerView, float slideOffset) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View drawerView) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerStateChanged(int newState) {
|
||||
final Fragment fragment = getLeftDrawerFragment();
|
||||
if (fragment instanceof AccountsDashboardFragment) {
|
||||
((AccountsDashboardFragment) fragment).loadAccounts();
|
||||
}
|
||||
}
|
||||
|
||||
private static final class AccountChangeObserver extends ContentObserver {
|
||||
private final HomeActivity mActivity;
|
||||
|
||||
|
@ -64,7 +64,7 @@ public class TabPagerIndicator extends RecyclerView implements PagerIndicator, C
|
||||
ViewCompat.setOverScrollMode(this, ViewCompat.OVER_SCROLL_NEVER);
|
||||
setHorizontalScrollBarEnabled(false);
|
||||
setVerticalScrollBarEnabled(false);
|
||||
setLayoutManager(mLayoutManager = new TabLayoutManager(context));
|
||||
setLayoutManager(mLayoutManager = new TabLayoutManager(context, this));
|
||||
setItemContext(context);
|
||||
setAdapter(mIndicatorAdapter);
|
||||
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TabPagerIndicator);
|
||||
@ -489,9 +489,11 @@ public class TabPagerIndicator extends RecyclerView implements PagerIndicator, C
|
||||
private static class TabLayoutManager extends FixedLinearLayoutManager {
|
||||
|
||||
private boolean mTabExpandEnabled;
|
||||
private final RecyclerView mRecyclerView;
|
||||
|
||||
public TabLayoutManager(Context context) {
|
||||
public TabLayoutManager(Context context, RecyclerView recyclerView) {
|
||||
super(context, HORIZONTAL, false);
|
||||
mRecyclerView = recyclerView;
|
||||
setAutoMeasureEnabled(true);
|
||||
}
|
||||
|
||||
@ -502,7 +504,7 @@ public class TabPagerIndicator extends RecyclerView implements PagerIndicator, C
|
||||
if (!isTabExpandEnabled()) return;
|
||||
final int count = getItemCount();
|
||||
if (count == 0) return;
|
||||
final int parentHeight = getHeight(), parentWidth = getWidth();
|
||||
final int parentHeight = mRecyclerView.getHeight(), parentWidth = mRecyclerView.getWidth();
|
||||
final int decoratedWidth = getDecoratedMeasuredWidth(child);
|
||||
final int measuredWidth = child.getMeasuredWidth();
|
||||
final int decoratorWidth = decoratedWidth - measuredWidth;
|
||||
|
@ -42,14 +42,31 @@
|
||||
app:contentInsetEnd="0dp"
|
||||
app:contentInsetStart="0dp">
|
||||
|
||||
<org.mariotaku.twidere.view.TabPagerIndicator
|
||||
android:id="@+id/main_tabs"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:tabDisplayOption="icon"
|
||||
app:tabExpandEnabled="true"
|
||||
app:tabHorizontalPadding="@dimen/element_spacing_normal"
|
||||
tools:listitem="@layout/layout_tab_item"/>
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/drawer_toggle"
|
||||
style="?borderlessButtonStyle"
|
||||
android:layout_width="?actionBarSize"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:layout_weight="0"
|
||||
android:tag="tint|primary_color_dependent"
|
||||
android:background="?actionBarItemBackground"
|
||||
android:contentDescription="@string/open_accounts_dashboard"/>
|
||||
|
||||
<org.mariotaku.twidere.view.TabPagerIndicator
|
||||
android:id="@+id/main_tabs"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
app:tabDisplayOption="icon"
|
||||
app:tabExpandEnabled="true"
|
||||
app:tabHorizontalPadding="@dimen/element_spacing_normal"
|
||||
tools:listitem="@layout/layout_tab_item"/>
|
||||
</LinearLayout>
|
||||
</android.support.v7.widget.Toolbar>
|
||||
|
||||
<View
|
||||
|
@ -665,6 +665,7 @@
|
||||
<string name="reset_to_default">Reset to default</string>
|
||||
<string name="reset_keyboard_shortcuts_confirm">Reset keyboard shortcuts to default?</string>
|
||||
<string name="open_accounts_dashboard">Open accounts dashboard</string>
|
||||
<string name="close_accounts_dashboard">Close accounts dashboard</string>
|
||||
<string name="previous_tab">Previous tab</string>
|
||||
<string name="next_tab">Next tab</string>
|
||||
<string name="keyboard_shortcut_back">Back</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user