3

デザイン支援ライブラリを使用してタブを作成しています。デフォルトでは、テキストを含むタブが作成されます。アイコンだけのタブを作成するにはどうすればよいですか? また、現在選択されているタブの場合はアイコンの色を変更したいと思います。 </p>

ここに画像の説明を入力

4

4 に答える 4

8

これを使用して、viewPager を設定します。

public class SectionPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return mFragmentA;
            case 1:
                return mFragmentB;
            case 2:
                return mFragmentC;
            default:
                return null;
        }
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return ""; // This removes the title, as you wish
    }
}

そして、これはonCreateViewで:

final TabLayout tabLayout = (TabLayout) v.findViewById(R.id.tab_layout);
final ViewPager viewPager = (ViewPager) v.findViewById(R.id.view_pager);

viewPager.setAdapter(new SectionPagerAdapter(getActivity().getSupportFragmentManager()));
tabLayout.setupWithViewPager(viewPager);

また、知っておくと便利です:

for (int i = 0; i < tabLayout.getTabCount(); i++) {
    int iconId = -1;
    switch (i) {
        case 0:
            iconId = R.drawable.icon1;
            break;
        case 1:
            iconId = R.drawable.icon2;
            break;
        case 2:
            iconId = R.drawable.icon3;
            break;
    }
    tabLayout.getTabAt(i).setIcon(iconId);
}

// Needed since support libraries version 23.0.0 
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
       tabLayout.getTabAt(position).select();
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }

});

tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        super.onTabSelected(tab);
    }
});

選択したタブの色を変更するには:

   tabLayout.setSelectedTabIndicatorColor(colorId); // For the line
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        for (int i = 0; i < tabLayout.getTabCount(); i++) {
            tabLayout.getTabAt(i).getIcon().setTint(getResources().getColor(R.color.gray));
        }
        tabLayout.getTabAt(selectedTabPosition).getIcon().setTint(colorId);
    }
于 2015-08-24T02:22:12.280 に答える
2

ビュー ページャー アダプターで空のタイトルを返すことができます。または、アダプターを再利用する必要がある場合は、次のようにタイトルを空に設定してアイコンを設定するだけです。

 for (int i = 0; i < mTabLayout.getTabCount(); i++) {
                    TabLayout.Tab tab = mTabLayout.getTabAt(i);
                    tab.setIcon(R.drawable.icon);
                    tab.setText("");
                }
于 2015-08-23T10:22:50.050 に答える
1

SpannableString を使用し、それに ImageSpan を追加することで、「アイコンのみ」の効果を得ることができます。参照: Android で画像を使用して PagerSlidingTabStrip を開発するにはどうすればよいですか?

于 2015-08-23T14:23:21.570 に答える
1

私が知っている直接的な方法はありません。Tabしかし、ドキュメントを調べてみると、のアイコンを設定できることに気付きましたsetIcon()

だから多分あなたはこのようなことをします:

for (int i = 0; i < mTabLayout.getTabCount(); i++) {
  mTabLayout.getTabAt(i).setIcon(R.drawable.icon);
}

setCustomView()タブでa を実行することもできます。次のようにします。

for (int i = 0; i < mTabLayout.getTabCount(); i++) {
  View v = inflater.inflate(view, parent, false);
  ((ImageView) v).setImageResource(R.drawable.icon);
  mTabLayout.getTabAt(i).setCustomView(v);
}
于 2015-08-23T09:55:42.523 に答える