summaryrefslogtreecommitdiffstats
path: root/src/com/android/contacts/common/list/ViewPagerTabs.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/contacts/common/list/ViewPagerTabs.java')
-rw-r--r--src/com/android/contacts/common/list/ViewPagerTabs.java26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/com/android/contacts/common/list/ViewPagerTabs.java b/src/com/android/contacts/common/list/ViewPagerTabs.java
index 1ecbb4c9..87a0439f 100644
--- a/src/com/android/contacts/common/list/ViewPagerTabs.java
+++ b/src/com/android/contacts/common/list/ViewPagerTabs.java
@@ -26,6 +26,7 @@ import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewOutlineProvider;
+import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
@@ -44,6 +45,9 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP
ViewPager mPager;
private ViewPagerTabStrip mTabStrip;
+ // Keep track if scrolling to the target tab should be performed after the View has been
+ // rendered (so View.getWidth() returns valid values)
+ ViewTreeObserver mTabLayoutObserver;
/**
* Linearlayout that will contain the TextViews serving as tabs. This is the only child
@@ -230,9 +234,29 @@ public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnP
selectedChild.setSelected(true);
// Update scroll position
+ mPrevSelected = position;
+ if (selectedChild.getWidth() == 0) {
+ // this View is not laid out yet, defer scroll calculation
+ mTabLayoutObserver = selectedChild.getViewTreeObserver();
+ mTabLayoutObserver.addOnGlobalLayoutListener(new ViewTreeObserver
+ .OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ if (mTabLayoutObserver != null && mTabLayoutObserver.isAlive()) {
+ performScroll();
+ mTabLayoutObserver.removeOnGlobalLayoutListener(this);
+ }
+ }
+ });
+ } else {
+ performScroll();
+ }
+ }
+
+ public void performScroll() {
+ final View selectedChild = mTabStrip.getChildAt(mPrevSelected);
final int scrollPos = selectedChild.getLeft() - (getWidth() - selectedChild.getWidth()) / 2;
smoothScrollTo(scrollPos, 0);
- mPrevSelected = position;
}
@Override