项目中有许多地方用到了RadioGroup和Fragment组合实现切换类似于微博、微信底部的切换
布局代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.aima.jiangtao.libraryproject.activity.BottomTagActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 底下的3个tab --> <RadioGroup android:id="@+id/mHomeRadioGroup" android:layout_width="match_parent" android:layout_height="55dp" android:layout_alignParentBottom="true" android:background="#50ffffff" android:orientation="horizontal" > <RadioButton android:id="@+id/mHomeHomeRb" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:drawableTop="@drawable/selector_tab_home" android:gravity="center" android:background="#00000000" android:paddingBottom="2dp" android:paddingTop="4dp" android:text="演出" android:textColor="@drawable/selector_tab_text_color" android:textSize="10sp" /> <RadioButton android:id="@+id/mHomeCommunityRb" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:drawableTop="@drawable/selector_tab_community" android:gravity="center" android:paddingBottom="2dp" android:paddingTop="4dp" android:background="#00000000" android:text="社区" android:textColor="@drawable/selector_tab_text_color" android:textSize="10sp" /> <RadioButton android:id="@+id/mHomePersonRb" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:drawableTop="@drawable/selector_tab_person" android:gravity="center" android:background="#00000000" android:paddingBottom="2dp" android:paddingTop="4dp" android:text="我" android:textColor="@drawable/selector_tab_text_color" android:textSize="10sp" /> </RadioGroup> <!-- tab上方的显示区域 --> <FrameLayout android:id="@+id/mHomeContent" android:layout_alignParentBottom="true" android:layout_marginBottom="50dp" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </RelativeLayout> </RelativeLayout>
selector_top_home.xml其他的2个一样就不写了
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/tab_home_selector_pre_icon" android:state_pressed="false" android:state_selected="true" /> <item android:drawable="@drawable/tab_home_selector_pre_icon" android:state_checked="true" android:state_pressed="false" /> <item android:drawable="@drawable/tab_home_selector_nor_icon" /> </selector>下面是Activity 代码
package com.aima.jiangtao.libraryproject.activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentStatePagerAdapter; import android.widget.FrameLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import com.aima.jiangtao.libraryproject.R; import com.aima.jiangtao.libraryproject.fragment.CommunityFragment; import com.aima.jiangtao.libraryproject.fragment.HomeFragment; import com.aima.jiangtao.libraryproject.fragment.PersonFragment; /*** * Created by jiangtao * 16/3/10 * 底部切换Activity */ public class BottomTagActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener{ private FrameLayout mHomeContent; private RadioGroup mHomeRadioGroup; /** * 首页 */ private RadioButton mHomeHomeRb; /** * 社区 */ private RadioButton mHomeCommunityRb; /** * 个人 */ private RadioButton mHomePersonRb; /** * 一共3个fragment */ private static final int NUM_ITEMS = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bottom_tag); initView(); setListener(); } /** * 初始化View */ private void initView(){ mHomeContent = (FrameLayout) findViewById(R.id.mHomeContent); mHomeRadioGroup = (RadioGroup) findViewById(R.id.mHomeRadioGroup); mHomeHomeRb = (RadioButton) findViewById(R.id.mHomeHomeRb); mHomeCommunityRb = (RadioButton) findViewById(R.id.mHomeCommunityRb); mHomePersonRb = (RadioButton) findViewById(R.id.mHomePersonRb); //注意这里一定要写上 不然默认不是被选中的 mHomeRadioGroup.check(R.id.mHomeHomeRb); showIndexView(0); } /** * 设置监听 */ public void setListener(){ mHomeRadioGroup.setOnCheckedChangeListener(this); } /** *用adapter来管理三个Fragment界面的变化。 *注意,我这里用的Fragment都是v4包里面的 * */ FragmentStatePagerAdapter fragmentStatePagerAdapter = new FragmentStatePagerAdapter(BottomTagActivity.this.getSupportFragmentManager()) { @Override public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0:// 首页 fragment = new HomeFragment(); break; case 1:// 社区 fragment = new CommunityFragment(); break; case 2:// 个人 fragment = new PersonFragment(); break; default: new HomeFragment(); break; } return fragment; } @Override public int getCount() { return NUM_ITEMS; } }; @Override public void onCheckedChanged(RadioGroup group, int checkedId) { int index = 0; switch (checkedId){ case R.id.mHomeHomeRb: index = 0; break; case R.id.mHomeCommunityRb: index = 1; break; case R.id.mHomePersonRb: index = 2; break; } // 通过fragments这个adapter还有index来替换帧布局中的内容 showIndexView(index); } public void showIndexView(int index){ Fragment fragment = (Fragment) fragmentStatePagerAdapter.instantiateItem(mHomeContent, index); // 一开始将帧布局中的内容设置为第一个 fragmentStatePagerAdapter.setPrimaryItem(mHomeContent, 0, fragment); fragmentStatePagerAdapter.finishUpdate(mHomeContent); } }
HomeFragment代码:
package com.aima.jiangtao.libraryproject.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.aima.jiangtao.libraryproject.R; import com.aima.jiangtao.libraryproject.utils.ToashUtils; /** * Created by jiangtao * 16/3/10 * com.aima.jiangtao.libraryproject.fragment * LibraryProject */ public class HomeFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = LayoutInflater.from(getActivity()).inflate(R.layout.home_fragment,null); ToashUtils.show(getActivity(),"aaaaaaa"); return view; } // 重写setMenuVisibility方法,不然会出现叠层的现象 @Override public void setMenuVisibility(boolean menuVisibile) { super.setMenuVisibility(menuVisibile); if (this.getView() != null) { this.getView().setVisibility( menuVisibile ? View.VISIBLE : View.GONE); } } }
还有很多地方优化,不是很完善,如果用到了 自己优化下