Android 图标未随自定义选项卡布局而更改
我正在尝试使用自定义选项卡布局来实现badgeView,但选中选项卡后,选项卡中的图标不会再次更改。在使用“自定义表格布局”之前,选中选项卡时,选项卡中的图标将从灰色变为白色。这是java文件,我遗漏了什么吗Android 图标未随自定义选项卡布局而更改,android,tabs,icons,Android,Tabs,Icons,我正在尝试使用自定义选项卡布局来实现badgeView,但选中选项卡后,选项卡中的图标不会再次更改。在使用“自定义表格布局”之前,选中选项卡时,选项卡中的图标将从灰色变为白色。这是java文件,我遗漏了什么吗 public class MainActivity extends BaseActivity implements IMainView, TabLayout.OnTabSelectedListener { private TabLayout tlMain; private
public class MainActivity extends BaseActivity implements IMainView, TabLayout.OnTabSelectedListener {
private TabLayout tlMain;
private ViewPager vpMain;
private PagerAdapter pagerAdapter;
private MainPresenter mainPresenter;
private int[] tabIcons = {R.mipmap.ic_feeds_shade, R.mipmap.ic_notifications_shade
,R.mipmap.ic_sms_shade, R.mipmap.ic_event_note_shade
,R.mipmap.ic_account_circle_copy};
private int[] tabIconsWhite = {R.mipmap.ic_feeds_putih, R.mipmap.ic_notifications_putih
,R.mipmap.ic_sms_putih, R.mipmap.ic_event_note_putih
,R.mipmap.ic_account_circle_putih};
private String[] title = {"Laporan","Pemberitahuan","Perpesanan"
,"Agenda","Profile"};
private int[] unread = {0,7,0,0,0};
private Toolbar toolbar;
private ImageView iconTabItem;
private TextView badgeView;
public static void start(Context context){
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.putExtra("isLogin", true);
context.startActivity(intent);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_main);
mainPresenter = new MainPresenter(this);
mainPresenter.onCreate(context);
}
private void goToLogin(){
LoginActivity.start(context);
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
vpMain.setCurrentItem(tab.getPosition());
tab.setIcon(tabIconsWhite[tab.getPosition()]);
switch (tab.getPosition()){
case 0:
vpMain.setCurrentItem(0);
toolbar.setTitle(title[0]);
break;
case 1:
vpMain.setCurrentItem(1);
toolbar.setTitle(title[1]);
break;
case 2:
vpMain.setCurrentItem(2);
toolbar.setTitle(title[2]);
break;
case 3:
vpMain.setCurrentItem(3);
toolbar.setTitle(title[3]);
break;
case 4:
vpMain.setCurrentItem(4);
toolbar.setTitle(title[4]);
break;
default:
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.setIcon(tabIcons[tab.getPosition()]);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
@Override
public void initView() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitle(title[0]);
tlMain = (TabLayout) findViewById(R.id.tl_main);
tlMain.setupWithViewPager(vpMain);
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.setTabGravity(TabLayout.GRAVITY_FILL);
tlMain.setOnTabSelectedListener(this);
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), tlMain.getTabCount());
vpMain = (ViewPager) findViewById(R.id.vp_main);
vpMain.setAdapter(pagerAdapter);
vpMain.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tlMain));
if(getIntent().getExtras() != null){
Bundle bundle = getIntent().getExtras();
if(!bundle.getBoolean("isLogin")){
goToLogin();
}
}else{
goToLogin();
}
try {
for (int i = 0; i < 6; i++){
tlMain.getTabAt(i).setCustomView(prepareTabView(i));
}
} catch (Exception e){
e.printStackTrace();
}
}
public View prepareTabView(int pos){
View view = getLayoutInflater().inflate(R.layout.custom_tablayout, null);
iconTabItem = (ImageView)view.findViewById(R.id.icon_tabitem);
badgeView = (TextView)view.findViewById(R.id.tab_count);
iconTabItem.setImageResource(tabIcons[pos]);
if (unread[pos]>0){
badgeView.setVisibility(View.VISIBLE);
badgeView.setText(String.format(Locale.getDefault(), "%d", unread[pos]));
} else
badgeView.setVisibility(View.GONE);
return view;
} }
public类MainActivity扩展了BaseActivity,实现了IMainView、TabLayout.OnTabSelectedListener{
私人表格布局;
专用可视寻呼机;
私人寻呼机;
私人主讲人主讲人;
private int[]选项卡图标={R.mipmap.ic\u feeds\u shade,R.mipmap.ic\u notifications\u shade
,R.mipmap.ic\u sms\u shade,R.mipmap.ic\u event\u note\u shade
,R.mipmap.ic\u account\u circle\u copy};
private int[]tabiconswite={R.mipmap.ic_feed_putih,R.mipmap.ic_notifications_putih
,R.mipmap.ic\u sms\u putih,R.mipmap.ic\u事件\u注释\u putih
,R.mipmap.ic_account_circle_putih};
私有字符串[]title={“Laporan”、“Pemberitahuan”、“Perpesanan”
,“议程”,“概况”};
私有int[]未读={0,7,0,0,0};
专用工具栏;
私有ImageView iconTabItem;
私有文本视图;
公共静态void开始(上下文){
意向意向=新意向(上下文,MainActivity.class);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);
意图。putExtra(“isLogin”,真);
背景。开始触觉(意图);
}
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.view\u main);
mainPresenter=新的mainPresenter(此);
mainPresenter.onCreate(上下文);
}
私有无效goToLogin(){
LoginActivity.start(上下文);
}
@凌驾
已选择的公共选项卡(TabLayout.Tab){
setCurrentItem(tab.getPosition());
tab.setIcon(tabiconswite[tab.getPosition()]);
开关(tab.getPosition()){
案例0:
vpMain.setCurrentItem(0);
toolbar.setTitle(title[0]);
打破
案例1:
vpMain.setCurrentItem(1);
toolbar.setTitle(title[1]);
打破
案例2:
vpMain.setCurrentItem(2);
toolbar.setTitle(title[2]);
打破
案例3:
vpMain.setCurrentItem(3);
toolbar.setTitle(title[3]);
打破
案例4:
vpMain.setCurrentItem(4);
toolbar.setTitle(title[4]);
打破
违约:
}
}
@凌驾
已选择的公共选项卡(TabLayout.Tab){
tab.setIcon(tabIcons[tab.getPosition()]);
}
@凌驾
已重新选择公共选项卡(TabLayout.Tab){
}
@凌驾
公共视图(){
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
toolbar.setTitle(title[0]);
tlMain=(TabLayout)findviewbyd(R.id.tl_main);
tlMain.setupWithViewPager(vpMain);
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.addTab(tlMain.newTab());
tlMain.设置重力(表布局、重力和填充);
tlMain.setontAbsSelectedListener(此);
pagerAdapter=新的pagerAdapter(getSupportFragmentManager(),tlMain.getTabCount());
vpMain=(ViewPager)findViewById(R.id.vp_main);
vpMain.setAdapter(pagerAdapter);
vpMain.addOnPageChangeListener(新的TabLayout.TabLayoutOnPageChangeListener(tlMain));
if(getIntent().getExtras()!=null){
Bundle Bundle=getIntent().getExtras();
if(!bundle.getBoolean(“isLogin”)){
goToLogin();
}
}否则{
goToLogin();
}
试一试{
对于(int i=0;i<6;i++){
tlMain.getTabAt(i).setCustomView(prepareTabView(i));
}
}捕获(例外e){
e、 printStackTrace();
}
}
公共视图准备视图(内部位置){
视图=GetLayoutFlater()。充气(R.layout.custom_tablayout,null);
iconTabItem=(ImageView)view.findViewById(R.id.icon\u选项卡项);
badgeView=(TextView)view.findViewById(R.id.tab\u计数);
setImageResource(tabIcons[pos]);
如果(未读[pos]>0){
badgeView.setVisibility(View.VISIBLE);
badgeView.setText(String.format(Locale.getDefault(),“%d”,未读[pos]);
}否则
badgeView.setVisibility(View.GONE);
返回视图;
} }
这是view_main.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/dc_toolbar" />
<android.support.design.widget.TabLayout
android:id="@+id/tl_main"
android:layout_width="match_parent"
android:layout_height="65dp"
android:background="@color/colorPrimaryDark"
app:tabIndicatorColor="@color/dc_white"
app:tabIndicatorHeight="4dp"
app:tabSelectedTextColor="@color/dc_yellow"
app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
app:tabTextColor="@color/dc_white" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vp_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
这是用于custom_tablayout.xml的
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/icon_tabitem"
android:src="@mipmap/ic_notifications_shade" />
<TextView
android:id="@+id/tab_count"
android:layout_width="12dp"
android:layout_height="12dp"
android:background="@drawable/badge_item_count"
android:gravity="center"
android:text="99"
android:padding="1dp"
android:textColor="@color/dc_white"
android:textSize="6sp"
android:textStyle="bold"
android:layout_alignEnd="@+id/icon_tabitem"/>
</RelativeLayout>
</RelativeLayout>
感谢您的帮助:)您可以尝试创建一个函数,将所有图标更改回默认值,然后在分配选定图标之前调用它:)您可以尝试创建一个函数,将所有图标更改回默认值,然后在分配选定图标之前调用它:)您可以使用下面的代码段
private void updateTabIcon() {
mTabLayout.setupWithViewPager("your_pager");
for (int pos = 0; pos < "your_total_tab_count"; pos++) {
TabLayout.Tab tab = mTabLayout.getTabAt(pos);
assert tab != null;
tab.setCustomView(R.layout."your_custom_tab_view");
ImageView tabIcon = (ImageView) tab.getCustomView().findViewById(R.id.icon);
TextView badgeView = (TextView) tab.getCustomView().findViewById(R.id.text1);
//Use switch or if to set particular icon to particular tab
badgeView.setText("your_badge_Text");
tabIcon.setImageResource("your_selector_icon_drawable");
}
}
private void updateTabIcon(){
mTabLayout.setupWithViewPager(“您的寻呼机”);
对于(int pos=0;pos<“您的总选项卡计数”pos++){
TabLayout.Tab Tab=mTabLayout.getTabAt(位置);
断言选项卡!=null;
设置自定义视图(R.layout.“您的自定义”选项卡视图);
ImageView选项卡图标=(ImageView)选项卡.getCustomView().findViewById(R.id.icon);
TextView badgeView=(TextView)tab.getCustomView().findViewById(R.id.text1);
//使用开关或if将特定图标设置为特定选项卡
badgeView.setText(
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/"selected_drawable" android:state_selected="true" />
<item android:drawable="@drawable/"unselected_drawable" android:state_selected="false" />
</selector>