Fragment + TabHost + RadioGroup 结合使用 , 实现底菜单的效果!
1. 使用FragMent是因为 4.0.3之后 ,摒弃了TabActivity这种用法,
Demo 效果图:
先上布局XML
R.layout.activity_main
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.0" android:visibility="gone"/> <include android:id="@+id/header" layout="@layout/my_header" android:layout_height="wrap_content" android:layout_width="fill_parent"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0"> <fragment android:name="com.example.coolsmile.fragment.HomeFragment" android:id="@+id/HomeFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:name="com.example.coolsmile.fragment.fragment_tab2" android:id="@+id/fragment_tab2" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_tab3" android:name="com.example.coolsmile.fragment.fragment_tab3" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_tab4" android:name="com.example.coolsmile.fragment.fragment_tab4" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_tab5" android:name="com.example.coolsmile.fragment.fragment_tab5" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> <RadioGroup android:id="@+id/main_tab" android:background="@drawable/bottom1" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_gravity="bottom"> <RadioButton android:id="@+id/main_tab_home" style="@style/MMTabButton" android:layout_weight="1.0" android:drawableTop="@drawable/menu_icon_0_normal" android:text="@string/main_home"/> <RadioButton android:id="@+id/main_tab_info" style="@style/MMTabButton" android:layout_weight="1.0" android:drawableTop="@drawable/menu_icon_1_normal" android:text="@string/main_my_info" /> <RadioButton android:id="@+id/main_tab_news" style="@style/MMTabButton" android:layout_weight="1.0" android:drawableTop="@drawable/menu_icon_2_normal" android:text="@string/main_news" /> <RadioButton android:id="@+id/main_tab_search" style="@style/MMTabButton" android:layout_weight="1.0" android:drawableTop="@drawable/menu_icon_3_normal" android:text="@string/main_search"/> <RadioButton android:id="@+id/main_tab_settings" style="@style/MMTabButton" android:layout_weight="1.0" android:drawableTop="@drawable/menu_icon_3_normal" android:focusable="false" android:text="@string/main_settings" /> </RadioGroup> <TextView android:id="@+id/main_tab_new_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" android:layout_marginLeft="15dip" android:layout_marginTop="-46dip" android:background="@drawable/tips" android:gravity="center" android:textColor="#ffffff" android:textSize="10sp" android:visibility="visible" /> </LinearLayout> </TabHost>
这里有个Fragment标签
android:name="com.example.coolsmile.fragment.HomeFragment"
这里的android:name="具体的Fragment的实现类"
这里我的Acitivty继承了FargmentActivity,onCreate方法里
setContentView(R.layout.activity_main); InitUI();
private void InitUI(){ // get Resource R.string InitUIString(); // set Message Number TextView main_tab_new_message=(TextView) findViewById(R.id.main_tab_new_message); main_tab_new_message.setVisibility(View.VISIBLE); main_tab_new_message.setText("6"); tabHost = (TabHost) findViewById(android.R.id.tabhost); tabHost.setup(); tabHost.addTab( tabHost.newTabSpec(main_home).setIndicator(main_home).setContent(R.id.HomeFragment) ); tabHost.addTab( tabHost.newTabSpec(main_my_info).setIndicator(main_my_info).setContent(R.id.fragment_tab2) ); tabHost.addTab( tabHost.newTabSpec(main_news).setIndicator(main_news).setContent(R.id.fragment_tab3) ); tabHost.addTab( tabHost.newTabSpec(main_search).setIndicator(main_search).setContent(R.id.fragment_tab4) ); tabHost.addTab( tabHost.newTabSpec(main_settings).setIndicator(main_settings).setContent(R.id.fragment_tab5) ); tabHost.setCurrentTab(0); InitClickListener(); } private void InitClickListener(){ RadioGroup radioGroup=(RadioGroup) this.findViewById(R.id.main_tab); radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (checkedId) { case R.id.main_tab_home: tabHost.setCurrentTabByTag(main_home); break; case R.id.main_tab_info: tabHost.setCurrentTabByTag(main_my_info); break; case R.id.main_tab_news: tabHost.setCurrentTabByTag(main_news); break; case R.id.main_tab_search: tabHost.setCurrentTabByTag(main_search); break; case R.id.main_tab_settings: tabHost.setCurrentTabByTag(main_settings); break; default: tabHost.setCurrentTabByTag(main_home); } } }); } @Override public void onClick(View v) { } public MainHeader getHeader(){ return this.header; } private void InitUIString(){ main_home = getResources().getString(R.string.main_home); main_my_info = getResources().getString(R.string.main_my_info); main_news = getResources().getString(R.string.main_news); main_search = getResources().getString(R.string.main_search); main_settings = getResources().getString(R.string.main_settings); }
这里实例了一个效果图的HomeFragMent
public class HomeFragment extends Fragment{ View view; String[] presidents = { "Dwight D. Eisenhower", "John F. Kennedy", "Lyndon B. Johnson", "Richard Nixon", "Gerald Ford", "Jimmy Carter", "Ronald Reagan", "George H. W. Bush", "Bill Clinton", "George W. Bush", "Barack Obama" }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub view = inflater.inflate(R.layout.fragment_tab1,container,false); Init(); return view ; } protected void Init(){ ListView list = (ListView)view.findViewById(android.R.id.list); list.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, presidents)); list.setOnItemClickListener(listener); } private OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub Intent intent = new Intent(getActivity(), ListContainActivity.class); intent.putExtra("PRESIDENTS_CONTENT",presidents[position]); getActivity().startActivity(intent); } }; }
点击: 下载DEMO