2015-07-24 16 views
5

Próbuję zrobić zakładkę tablayout po tym https://guides.codepath.com/android/Google-Play-Style-Tabs-using-TabLayout#add-custom-view-to-tablayoutTabLayout Ikona nie pokazując

Teraz próbuję pokazać ikony zamiast tekstu za pomocą imagespan. Ale bez powodzenia, czy ktoś może wskazać, czego brakuje w tym samouczku?

Oto kod

public class HomeActivity extends FragmentActivity { 

//Fragments List 
public ArrayList <Fragment> fragmentList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    setUpFragmentList(); 

    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    ViewPager viewPager = (ViewPager) findViewById(R.id.home_viewpager); 
    viewPager.setAdapter(new HomeFragmentPagerAdapter(getSupportFragmentManager(), HomeActivity.this, fragmentList)); 

    // Give the TabLayout the ViewPager 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs); 
    //start this 2 are to set the tab to fill entire screen 
    tabLayout.setTabMode(TabLayout.MODE_FIXED); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    //end this 2 are to set the tab to fill entire screen 

    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.getTabAt(1).setIcon(R.drawable.ic_tab_down_activity); 

} 

private void setUpFragmentList() { 
    fragmentList = new ArrayList<>(); 

    fragmentList.add(new MyActivitesFragment()); 
    fragmentList.add(new ChatListFragment()); 
    fragmentList.add(new QuickMatchFragment()); 
    fragmentList.add(new FilterMatchFragment()); 
} 
} 


public class HomeFragmentPagerAdapter extends FragmentPagerAdapter { 
private String tabTitles[] = new String[] { "Tab1", "Tab2", "Tab3" ,"Tab4"}; 
private Context context; 

private ArrayList <Fragment> fragmentList; 

private int[] imageResId = { 
     // unclicked 
     R.drawable.ic_tab_down_activity, 
     R.drawable.ic_tab_down_chat, 
     R.drawable.ic_tab_down_find, 
     R.drawable.ic_tab_down_filter, 
}; 

public HomeFragmentPagerAdapter(FragmentManager fm, Context context, ArrayList <Fragment> fragmentList) { 
    super(fm); 
    this.context = context; 
    this.fragmentList = fragmentList; 
} 

@Override 
public int getCount() { 
    return fragmentList.size(); 
} 

@Override 
public Fragment getItem(int position) { 
    return fragmentList.get(position); 
} 

@Override 
public CharSequence getPageTitle(int position) { 

    Drawable image = context.getResources().getDrawable(imageResId[position]); 
    image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight()); 
    SpannableString sb = new SpannableString(" "); 
    ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM); 
    sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return sb; 
} 
} 
+0

Ta część wygląda dobrze, pokaż wszystkie kodzie zakładkach. –

Odpowiedz

0

Nie włożyć dowolną kartę.

Dodaj zakładkę taką jak: tabLayout.addTab (tabLayout.newTab(). SetText ("Tab One")) ;.

0

dobrze Chyba brakuje główny punkt w swojej xml. Ustaw tekst Styl wyglądu dla układu karty. tzn. textAllCaps = false, w przeciwnym razie zasięg obrazu nie będzie działać.

+1

Nawet ustawienie, że wartość false nie działa – pnavk

3

W niestandardowym pliku layoutu zakładka, po prostu zrobić textAllCaps false. To zadziała :) Powód, obraz jest konwertowany na postacie, a jeśli to prawda, to konwersja ich na kapitał nie spowoduje renderowania obrazu.

<style name="MyCustomTabTextAppearance" parent="TextAppearance.Design.Tab"> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textColor">?android:textColorSecondary</item> 
    <item name="textAllCaps">false</item> 
</style> 
+0

Dzięki za pomoc, to rozwiązać mój problem! Dodany MyCustomTabTextAppearance w styles.xml i skonfigurować aplikację: tabTextAppearance = "@ styl/MyCustomTabTextAppearance" atrybut android.support.design.widget.TabLayout widzenia w działalności xml. – lbartolic

3

Najwyraźniej już okazało się rozwiązanie, za pomocą TabLayout.getTabAt (I) .setIcon (imageResId [i]);

w pierwszym moim zamiarem jest, aby być w stanie ustawić wszystkie ikony z adapterem viewpager. ale ponieważ nie mam pojęcia, ani czasu, aby znaleźć rozwiązanie. zamiast tego skorzystam z tej drugiej sztuczki, którą odkryłem.

a także, aby przełączyć obraz dookoła używam TabLayout.TabLayoutOnPageChangeListener

nadzieję, że to pomoże komuś, kto to zbyt potrzebne. =]