2015-01-24 7 views
5

this उदाहरण के बाद मैं केवल आइकन के साथ एक स्लाइडिंगटैबआउट बनाने में सक्षम था लेकिन मैं उन्हें केंद्र बनाना चाहता हूं। क्या मुझे कस्टम व्यू बनाने की ज़रूरत है या क्या अन्य समाधान हैं?स्लाइड्सटाबलाउट आइकन के साथ केवल

किसी भी मदद की सराहना की जाएगी।

enter image description here

+0

अंदर onPageSelected बदल आइकन आकार बदलने के लिए कैसे? – ThirdMartian

उत्तर

25

अंत में i'v यह पता लगा। यहाँ मेरी कोड उदाहरण है ...

प्रत्येक टैब के लिए एक drawable बनाएँ, मेरे मामले में मैं बनाया store_tab.xml और cart_tab.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/ic_store_white_24dp" android:state_selected="true" /> 
    <item android:drawable="@drawable/ic_store_grey600_24dp" /> 
</selector> 

अपनी खुद की पेजर एडाप्टर, जो FragmentPageAdapter

public class HomePagerAdapter extends FragmentPagerAdapter { 

    private static int[] ICONS = new int[] { 
     R.drawable.store_tab, 
     R.drawable.cart_tab 
    }; 

    // ... 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return ICONS.length; 
    } 

    public int getDrawableId(int position) { 
     return ICONS[position]; 
    } 

} 
तक फैली हुई है बनाएं

SlidingTabLayout

protected ImageView createDefaultImageView(Context context) { 
    ImageView imageView = new ImageView(context); 

    int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); 
    imageView.setPadding(padding, padding, padding, padding); 

    int width = (int) (getResources().getDisplayMetrics().widthPixels/mViewPager.getAdapter().getCount()); 
    imageView.setMinimumWidth(width); 

    return imageView; 
} 
में नई विधि निम्नलिखित बनाएं

फिर SlidingTabLayout

private void populateTabStrip() { 
    final HomePagerAdapter adapter = (HomePagerAdapter) mViewPager.getAdapter(); 
    final View.OnClickListener tabClickListener = new TabClickListener(); 

    for (int i = 0; i < adapter.getCount(); i++) { 
     View tabView = null; 
     //TextView tabTitleView = null; 
     ImageView tabIconView = null; 

     /*if (mTabViewLayoutId != 0) { 
      // If there is a custom tab view layout id set, try and inflate it 
      tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, 
        false); 
      tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); 
     } 

     if (tabView == null) { 
      tabView = createDefaultTabView(getContext()); 
     } 

     if (tabTitleView == null && TextView.class.isInstance(tabView)) { 
      tabTitleView = (TextView) tabView; 
     }*/ 

     if (tabView == null) { 
      tabView = createDefaultImageView(getContext()); 
     } 

     if (tabIconView == null && ImageView.class.isInstance(tabView)) { 
      tabIconView = (ImageView) tabView; 
     } 

     tabIconView.setImageDrawable(getResources().getDrawable(adapter.getDrawableId(i))); 
     if (mViewPager.getCurrentItem() == i) { 
      tabIconView.setSelected(true); 
     } 
     //tabTitleView.setText(adapter.getPageTitle(i)); 
     tabView.setOnClickListener(tabClickListener); 

     mTabStrip.addView(tabView); 
    } 
} 

अंदर विधि populateTabStrip बदल अंत में InternalViewPageListener

@Override 
public void onPageSelected(int position) { 
    for (int i = 0; i < mTabStrip.getChildCount(); i++) { 
     mTabStrip.getChildAt(i).setSelected(false); 
    } 
    mTabStrip.getChildAt(position).setSelected(true); 

    if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { 
     mTabStrip.onViewPagerPageChanged(position, 0f); 
     scrollToTab(position, 0); 
    } 

    if (mViewPagerPageChangeListener != null) { 
     mViewPagerPageChangeListener.onPageSelected(position); 
    } 
} 

अंतिम परिणाम

enter image description here

+0

यह बहुत अच्छा काम करता है! – chip

संबंधित मुद्दे