以下是一个使用气泡标签指示器的自定义Android选项卡选中项的示例代码:
public class MyTabSelectedListener implements TabLayout.OnTabSelectedListener {
private Context context;
private LayoutInflater inflater;
public MyTabSelectedListener(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
// 获取选中项的View
View view = tab.getCustomView();
TextView textView = view.findViewById(R.id.tabText);
ImageView imageView = view.findViewById(R.id.tabIcon);
// 修改选中项的样式
textView.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
imageView.setColorFilter(ContextCompat.getColor(context, R.color.colorAccent));
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
// 获取未选中项的View
View view = tab.getCustomView();
TextView textView = view.findViewById(R.id.tabText);
ImageView imageView = view.findViewById(R.id.tabIcon);
// 修改未选中项的样式
textView.setTextColor(ContextCompat.getColor(context, R.color.colorPrimaryDark));
imageView.setColorFilter(ContextCompat.getColor(context, R.color.colorPrimaryDark));
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabLayout = findViewById(R.id.tabLayout);
viewPager = findViewById(R.id.viewPager);
// 设置ViewPager的适配器
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
// 将TabLayout与ViewPager关联起来
tabLayout.setupWithViewPager(viewPager);
// 设置自定义的TabLayout.OnTabSelectedListener
MyTabSelectedListener tabSelectedListener = new MyTabSelectedListener(this);
tabLayout.addOnTabSelectedListener(tabSelectedListener);
// 设置选项卡的自定义布局
for (int i = 0; i < tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
tab.setCustomView(adapter.getTabView(i));
}
}
}
public class MyPagerAdapter extends FragmentPagerAdapter {
private String[] tabTitles = {"Tab 1", "Tab 2", "Tab 3"};
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(tabTitles[position]);
}
@Override
public int getCount() {
return tabTitles.length;
}
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
public View getTabView(int position) {
View view = LayoutInflater.from(context).inflate(R.layout.custom_tab_layout, null);
TextView tabText = view.findViewById(R.id.tabText);
ImageView tabIcon = view.findViewById(R.id.tabIcon);
tabText.setText(tabTitles[position]);
tabIcon.setImageResource(R.drawable.ic_tab);
return view;
}
}
public class MyFragment extends Fragment {
private static final String ARG_TITLE = "title";
private String title;
public MyFragment() {
// Required empty public constructor
}
public static MyFragment newInstance(String title) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
title = getArguments().getString(ARG_TITLE);
}