package com.example.tabtest;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTabHost;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
public static final int TAB_WECHAT = 0;
public static final int TAB_FRIEND = 1;
public static final int TAB_CONTACTS = 2;
public static final int TAB_SETTING = 3;
private List<TabItem> mFragmentList;
private FragmentTabHost mFragmentTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTabItemData();
}
/**
* 更新新消息数量
*
* @param tabIndex tab 的索引
* @param msgCount 消息数量
*/
public void updateMsgCount(int tabIndex, int msgCount) {
mFragmentList.get(tabIndex).setNewMsgCount(msgCount);
}
/**
* 初始化 Tab 数据
*/
private void initTabItemData() {
mFragmentList = new ArrayList<>();
mFragmentList.add(new TabItem(
R.drawable.tab_wechat_normal,
R.drawable.tab_wechat_selected,
"微信",
WeChatFragment.class
));
mFragmentList.add(new TabItem(
R.drawable.tab_friend_normal,
R.drawable.tab_friend_selected,
"朋友",
FriendFragment.class
));
mFragmentList.add(new TabItem(
R.drawable.tab_contacts_normal,
R.drawable.tab_contacts_selected,
"联系人",
ContactsFragment.class
));
mFragmentList.add(new TabItem(
R.drawable.tab_settings_normal,
R.drawable.tab_settings_selected,
"设置",
SettingFragment.class
));
mFragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
// 绑定 FragmentManager
mFragmentTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);
// 删除分割线
mFragmentTabHost.getTabWidget().setDividerDrawable(null);
for (int i = 0; i < mFragmentList.size(); i++) {
TabItem tabItem = mFragmentList.get(i);
// 创建 tab
TabHost.TabSpec tabSpec = mFragmentTabHost.newTabSpec(
tabItem.getTabText()).
setIndicator(tabItem.getTabView());
// 将创建的 tab 添加到底部 tab 栏中( @android:id/tabs )
// 将 Fragment 添加到页面中( @android:id/tabcontent )
mFragmentTabHost.addTab(tabSpec, tabItem.getFragmentClass(), null);
// 底部 tab 栏设置背景图片
mFragmentTabHost.getTabWidget().setBackgroundResource(R.drawable.bottom_bar);
// 默认选中第一个 tab
if (i == 0) {
tabItem.setChecked(true);
} else {
tabItem.setChecked(false);
}
}
// 切换 tab 时,回调此方法
mFragmentTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < mFragmentList.size(); i++) {
TabItem tabItem = mFragmentList.get(i);
// 通过 tag 检查用户点击的是哪个 tab
if (tabId.equals(tabItem.getTabText())) {
tabItem.setChecked(true);
} else {
tabItem.setChecked(false);
}
}
}
});
}
class TabItem {
private ImageView mIvTab;
/**
* 正常状态的图片
*/
private int imageNormal;
/**
* 选中状态的图片
*/
private int imageSelected;
private TextView mTvTab;
/**
* 文字
*/
private String tabText;
/**
* Fragment
*/
private Class<? extends Fragment> fragmentClass;
private View mTabView;
/**
* 新消息
*/
private TextView mTvNewMsg;
public TabItem(int imageNormal,
int imageSelected,
String text,
Class<? extends Fragment>
fragmentClass) {
this.imageNormal = imageNormal;
this.imageSelected = imageSelected;
this.tabText = text;
this.fragmentClass = fragmentClass;
}
public Class<? extends Fragment> getFragmentClass() {
return fragmentClass;
}
/**
* 获取 tab 上的文字
*
* @return tab 上的文字
*/
public String getTabText() {
return tabText;
}
/**
* 设置选中
*
* @param checked 是否选中
*/
public void setChecked(boolean checked) {
if (checked) {
mTvTab.setTextColor(getResources().getColor(R.color.colorTabText));
mIvTab.setImageResource(imageSelected);
} else {
mTvTab.setTextColor(Color.WHITE);
mIvTab.setImageResource(imageNormal);
}
}
public View getTabView() {
mTabView = View.inflate(MainActivity.this, R.layout.view_tab, null);
mIvTab = (ImageView) mTabView.findViewById(R.id.iv_tab);
mTvTab = (TextView) mTabView.findViewById(R.id.tv_tab);
mTvNewMsg = (TextView) mTabView.findViewById(R.id.tv_new_msg);
mIvTab.setImageResource(imageNormal);
mTvTab.setText(tabText);
return mTabView;
}
/**
* 设置新消息数量
*/
public void setNewMsgCount(int count) {
if (count > 0) {
mTvNewMsg.setText(String.valueOf(count));
}
mTvNewMsg.setBackgroundResource(R.drawable.ic_new_msg);
}
}
}
评论2
最新资源