TabHost结合RadioButton实现主页的导航效果
1 布局文件的设置,如下 2 3 <?xml version="1.0" encoding="utf-8"?> 4 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 5 android:id="@+id/tabhosts" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:layout_weight="1" 9 android:background="#fff" > 10 11 <LinearLayout 12 android:layout_width="fill_parent" 13 android:layout_height="match_parent" 14 android:orientation="vertical" > 15 16 <FrameLayout 17 android:id="@android:id/tabcontent" 18 android:layout_width="match_parent" 19 android:layout_weight="1.0" 20 android:layout_height="0.0dp" /> 21 22 <TabWidget 23 android:visibility="gone" 24 android:id="@android:id/tabs" 25 android:layout_width="match_parent" 26 android:layout_height="wrap_content" 27 android:layout_gravity="bottom" 28 android:orientation="horizontal"/> 29 30 <RadioGroup 31 android:layout_gravity="bottom" 32 android:gravity="center" 33 android:id="@+id/main_rdg" 34 android:background="@drawable/main_radio_bg" 35 android:layout_width="match_parent" 36 android:layout_height="wrap_content" 37 android:orientation="horizontal" > 38 39 <RadioButton 40 style="@style/bottom_radio_style" 41 android:id="@+id/rd_index" 42 android:layout_width="0dp" 43 android:layout_height="match_parent" 44 android:text="@string/index" 45 android:gravity="center_horizontal" 46 android:drawableTop="@drawable/icon_tab_homepage_checked" 47 android:layout_weight="1" 48 /> 49 50 <RadioButton 51 style="@style/bottom_radio_style" 52 android:id="@+id/rd_near" 53 android:layout_width="0dp" 54 android:layout_height="match_parent" 55 android:layout_weight="1" 56 android:text="@string/near" 57 android:drawableTop="@drawable/icon_tab_nearby_checked" /> 58 59 <RadioButton 60 style="@style/bottom_radio_style" 61 android:id="@+id/rd_own" 62 android:layout_width="0dp" 63 android:layout_height="match_parent" 64 android:layout_weight="1" 65 android:text="@string/own" 66 android:drawableTop="@drawable/icon_tab_mine_checked"/> 67 68 <RadioButton 69 style="@style/bottom_radio_style" 70 android:id="@+id/rd_more" 71 android:text="@string/more" 72 android:drawableTop="@drawable/icon_tab_more_checked" 73 android:layout_width="0dp" 74 android:layout_height="match_parent" 75 android:layout_weight="1" /> 76 </RadioGroup> 77 78 </LinearLayout> 79 </TabHost> 80 81 通过样式文件更改radioButton的效果 82 83 <?xml version="1.0" encoding="utf-8"?> 84 85 <resources xmlns:android="http://schemas.android.com/apk/res/android"> 86 87 <style name="bottom_radio_style"> 88 89 <item name="android:button">@null</item> 90 91 <item name="android:gravity">center</item> 92 93 <item name="android:background">@drawable/main_bottom_rd</item> 94 95 </style> 96 97 </resources> 98 99 选择效果(选择一个标签是的一个选择效果) 100 101 <?xml version="1.0" encoding="utf-8"?> 102 103 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 104 105 <item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/main_radio_select"></item> 106 107 <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/main_radio_select"></item> 108 109 </selector> 110 111 activity中的代码设置如下: 112 113 package cn.liu.activity; 114 public class MainActivity extends ActivityGroup { 115 protected static final String TAG = "MainActivity"; 116 private TabHost tabHost = null; 117 private RadioGroup rGroup; 118 119 @Override 120 protected void onCreate(Bundle savedInstanceState) { 121 super.onCreate(savedInstanceState); 122 // 设置手机全屏显示 123 requestWindowFeature(Window.FEATURE_NO_TITLE); 124 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 125 WindowManager.LayoutParams.FLAG_FULLSCREEN); 126 setContentView(R.layout.main); 127 // 通过findviewbyId这种方式找到tabhost,就必须要调用 128 // setup方法,而且如果当前类,没有集成ActivityGroup,会报E/AndroidRuntime(380): java.lang.RuntimeException: Unable to start activity 129 ComponentInfo{cn.liu.eat/cn.liu.activity.MainActivity}: java.lang.IllegalStateException: Did you forget to call 'public void 130 setup(LocalActivityManager activityGroup)且setup必须要设置成this.getLocalActivityManager()这样才不会出问题 131 tabHost = (TabHost) this.findViewById(R.id.tabhosts); 132 tabHost.setup(this.getLocalActivityManager()); 133 TabSpec tabSpec1 = tabHost.newTabSpec("tab1").setIndicator("tab1") 134 .setContent(new Intent(this, HomeActivity.class)); 135 TabSpec tabSpec2 = tabHost.newTabSpec("tab2").setIndicator("tab2") 136 .setContent(new Intent(this, NearActivity.class)); 137 TabSpec tabSpec3 = tabHost.newTabSpec("tab3").setIndicator("tab3") 138 .setContent(new Intent(this, MineActivity.class)); 139 TabSpec tabSpec4 = tabHost.newTabSpec("tab4").setIndicator("tab4") 140 .setContent(new Intent(this, MoreActivity.class)); 141 142 tabHost.addTab(tabSpec1); 143 tabHost.addTab(tabSpec2); 144 tabHost.addTab(tabSpec3); 145 tabHost.addTab(tabSpec4); 146 tabHost.setCurrentTab(0); 147 148 rGroup = (RadioGroup) this.findViewById(R.id.main_rdg); 149 rGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 150 @Override 151 public void onCheckedChanged(RadioGroup group, int checkedId) { 152 switch (checkedId) { 153 case R.id.rd_index: 154 tabHost.setCurrentTabByTag("tab1"); 155 break; 156 case R.id.rd_near: 157 tabHost.setCurrentTabByTag("tab2"); 158 break; 159 case R.id.rd_own: 160 tabHost.setCurrentTabByTag("tab3"); 161 break; 162 case R.id.rd_more: 163 tabHost.setCurrentTabByTag("tab4"); 164 break; 165 } 166 } 167 }); 168 169 } 170 171 } 172