2014-09-23 15 views
5

jak mogę dodać ikony w kartach zamiast tytułu w adapterze kart, który rozszerza FragmentPagerAdapter w Androidzie? Nie chcę używać paska akcji w moim projekcieDodaj ikony do adaptera kart, który rozszerza FragmentPagerAdapter

proszę o pomoc?

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; 
    } 

} 

również próbowałem to metody, ale nie działa

@Override public int getPageIconResId (int pozycja) { ikony Powrót [Position]; }

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

Odpowiedz

1

używam jako kanału alfa wektor moich obrazów Tab działa to tylko na API> 21. Ale jestem pewien, że możesz po prostu użyć rysunków graficznych w ten sam sposób.

Oto mój kod:

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; 
    } 

Ze zdjęciami:

@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
narzędziem, którego używam do konwersji SVG do VectorDrawable: http://inloop.github.io/svg2android/

1

użyłem tej biblioteki https://github.com/pizza/MaterialTabs, aby dodać karty z tekstem i ikonami w moim projekcie.

Oto przykład, który pokazuje, jak używać tylko ikony w tytułach zakładka: https://github.com/pizza/MaterialTabs/blob/master/sample/src/io/karim/materialtabs/sample/MainActivity.java#L397

Zakres zmian jest mieć klasa FragmentPagerAdapter implementować interfejs MaterialTabs.CustomTabProvider. Spowoduje to dodanie metody getCustomTabView, w której można ustawić ikonę na karcie.

@Override 
public View getCustomTabView(ViewGroup parent, int position) { 
    ImageView imageView = new ImageView(context); 
    imageView.setImageDrawable(getResources().getDrawable(ICONS[position])); 
    return imageView; 
} 
Powiązane problemy