嗨我之前遇到过同样的问题,这是我能找到的最佳解决方案:
你应该使用(setCustomView),首先让一个新的布局文件让它命名(customtab.xml):
然后为每个选项卡执行以下操作:(使用相同的布局.xml)
View view1 = getLayoutInflater().inflate(R.layout.customtab, null); view1.findViewById(R.id.icon).setBackgroundResource(R.drawable.my1); tabLayout.addTab(tabLayout.newTab().setCustomView(view1)); View view2 = getLayoutInflater().inflate(R.layout.customtab, null); view2.findViewById(R.id.icon).setBackgroundResource(R.drawable.my2); tabLayout.addTab(tabLayout.newTab().setCustomView(view2)); View view3 = getLayoutInflater().inflate(R.layout.customtab, null); view3.findViewById(R.id.icon).setBackgroundResource(R.drawable.my3); tabLayout.addTab(tabLayout.newTab().setCustomView(view3)); ...
如文档中所述,您可以使用with创建新布局ImageView
,android:id="@android:id/icon"
并将其设置为选项卡的自定义视图.TabLayout将自动将图标放在内部ImageView中android:id/icon
然后在您的代码中,您可以setIcon(R.drawable.yourIcon)
在创建选项卡时调用它.
然后,您可以在for循环中应用自定义布局:
mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.searchpin)); mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.discussionpin)); mTabLayout.addTab(mTabLayout.newTab().setIcon(R.drawable.userpin)); for (int i = 0; i < mTabLayout.getTabCount(); i++) { TabLayout.Tab tab = mTabLayout.getTabAt(i); if (tab != null) tab.setCustomView(R.layout.view_home_tab); }
这是xml: