2014-09-23 118 views
5

我如何添加圖標而不是在標籤適配器中的標題在Android中擴展FragmentPagerAdapter的標籤中? 我不想在我的項目中使用動作欄將圖標添加到選項卡適配器擴展FragmentPagerAdapter

請幫忙嗎?

public class TabsPagerAdapter extends FragmentPagerAdapter { 

    public TabsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    private final int[] icons = {R.drawable.home,R.drawable.buddies,R.drawable.notification,R.drawable.history}; 

    @Override 
    public CharSequence getPageTitle(int position) { 
     if(position == 0) 
      return "Home"; 
     else if(position == 1) 
      return "Buddies"; 
     else if(position == 2) 
      return "History "; 
     else 
      return "Notifications"; 
    } 

    @Override 
    public Fragment getItem(int index) { 

     switch (index) { 
      case 0: 
       HomeFragment home = new HomeFragment(); 
       return home; 
      case 1: 
       return new BuddiesFragment(); 
      case 2: 
       return new HistoryFragment(); 
      case 3: 
       return new NotificationsFragment(); 
     } 

     return null; 
    } 


    @Override 
    public int getCount() { 
     return 4; 
    } 

} 

也我試圖此方法,但不工作

@覆蓋 公衆詮釋getPageIconResId(INT位置){ 返回圖標[位置]。 }

@Override 
    public boolean isViewFromObject(View view, Object o) { 
     return o == view; 
    } 

回答

1

我使用矢量繪圖資源爲我的標籤圖像,在API> 21這僅適用。 但我相信你可以用同樣的方式使用圖像繪製。

這裏是我的代碼:

class MyPagerAdapter extends FragmentPagerAdapter { 

    private String[] tabText = getResources().getStringArray(R.array.tabs); 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
     tabText = getResources().getStringArray(R.array.tabs); 

    } 

    @Override 
    public Fragment getItem(int position) { 

     Fragment fragment=null; 

     if (position == 0) 
      fragment = new FragmentA(); 
     if (position == 1) 
      fragment = new FragmentB(); 
     if (position == 2) 
      fragment=new FragmentC(); 

     return fragment; 
    } 




    @Override 
    public CharSequence getPageTitle(int position) { 

     SpannableString spannableString = null; 

     if (position == 0) { 
      //use the MrVector library to inflate vector drawable inside tab 
      Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_add); 
      //set the size of drawable to 36 pixels 
      drawable.setBounds(0, 0, 36, 36); 
      ImageSpan imageSpan = new ImageSpan(drawable); 
      //to make our tabs icon only, set the Text as blank string with white space 
      spannableString = new SpannableString(" "); 
      spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     if (position == 1) { 
      //use the MrVector library to inflate vector drawable inside tab 
      Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_list); 
      //set the size of drawable to 36 pixels 
      drawable.setBounds(0, 0, 36, 36); 
      ImageSpan imageSpan = new ImageSpan(drawable); 
      //to make our tabs icon only, set the Text as blank string with white space 
      spannableString = new SpannableString(" "); 
      spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     if (position == 2) { 
      //use the MrVector library to inflate vector drawable inside tab 
      Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_settings); 
      //set the size of drawable to 36 pixels 
      drawable.setBounds(0, 0, 36, 36); 
      ImageSpan imageSpan = new ImageSpan(drawable); 
      //to make our tabs icon only, set the Text as blank string with white space 
      spannableString = new SpannableString(" "); 
      spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     return spannableString; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 

有圖片:

@Override 
    public CharSequence getPageTitle(int position) { 

     SpannableStringBuilder sb = new SpannableStringBuilder(" "); 

     if (position == 0) { 
      Drawable drawable = getDrawable(R.drawable.ic_action_add); 
      drawable.setBounds(0, 0, 48, 48); 
      ImageSpan imageSpan = new ImageSpan(drawable); 
      //to make our tabs icon only, set the Text as blank string with white space 
      sb.setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
     if (position == 1) { 
      Drawable drawable = getDrawable(R.drawable.ic_action_list_2); 
      drawable.setBounds(0, 0, 48, 48); 
      ImageSpan imageSpan = new ImageSpan(drawable); 
      //to make our tabs icon only, set the Text as blank string with white space 
      sb.setSpan(imageSpan, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 

     return sb; 
    } 

MrVector liabrary:https://github.com/telly/MrVector
一個工具,我用它來S​​VG轉換爲VectorDrawable:http://inloop.github.io/svg2android/

1

我使用這個庫https://github.com/pizza/MaterialTabs在我的項目中添加帶有文本和圖標的選項卡。

下面是顯示如何在選項卡標題只使用圖標的示例:https://github.com/pizza/MaterialTabs/blob/master/sample/src/io/karim/materialtabs/sample/MainActivity.java#L397

的變化程度是有你的FragmentPagerAdapter類實現MaterialTabs.CustomTabProvider接口。這添加了getCustomTabView方法,您可以在其中設置圖標。

@Override 
public View getCustomTabView(ViewGroup parent, int position) { 
    ImageView imageView = new ImageView(context); 
    imageView.setImageDrawable(getResources().getDrawable(ICONS[position])); 
    return imageView; 
} 
相關問題