fragment中,有viewpager实现界面滑动展示:
首先是布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RadioGroup android:id="@+id/rGroup" android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal"> </RadioGroup> <View android:layout_width="match_parent" android:layout_height="1px" android:background="#a88b8787"></View> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </LinearLayout>
其次是java代码:
fragment有关都是v4包下导入
public class RbFragment1 extends Fragment { private ViewPager vp; private RadioGroup rg; private RadioButton[] radioButtons; private String[] datas = {"1111111", "2222222", "3333333"}; private MainmainActivity mActivity; private List<Fragment> fragments; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_rb1, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mActivity = (MainmainActivity) getActivity(); vp = (ViewPager) mActivity.findViewById(R.id.vp); fragments = new ArrayList<>(); fragments.add(new VPFragment1()); fragments.add(new VPFragment2()); fragments.add(new VPFragment3()); vp.setAdapter(new VpAdapter(getFragmentManager())); //viewpager的页面切换事件 vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { radioButtons[position].setChecked(true); } @Override public void onPageScrollStateChanged(int state) { } }); rg = (RadioGroup) mActivity.findViewById(R.id.rGroup); radioButtons = new RadioButton[datas.length]; for (int i = 0; i < datas.length; i++) { RadioButton rbb = new RadioButton(getActivity()); //为了去除radiobutton自带的圆圈 Bitmap bm = null; rbb.setButtonDrawable(new BitmapDrawable(bm)); //设置radiobutton的点击效果 自己定义一个drawable rbb.setBackgroundResource(R.drawable.rb_bac_drawable); //为radiobutton设置显示文字 rbb.setText(datas[i]); //设置文字显示是否居中 rbb.setGravity(Gravity.CENTER); // 获取屏幕宽度 int screenWidth = getResources().getDisplayMetrics().widthPixels; //获取每个tag的宽度 int eachWidth = screenWidth / datas.length; //设置每个条目的宽度和高度,宽度就是上面得到的平均值,高度是包裹内容 ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(eachWidth, ViewGroup.LayoutParams.MATCH_PARENT); //给RadioButton设置宽度和高度,通过params设置 rbb.setLayoutParams(params); //把我们动态创建 rg.addView(rbb); radioButtons[i] = rbb; } //设置默认选中第一个 radioButtons[0].setChecked(true); //radioGroup中点击radiobutton的效果 rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Toast.makeText(mActivity, checkedId + "55", Toast.LENGTH_SHORT).show(); for (int i = 0; i < rg.getChildCount(); i++) { if (radioButtons[i].getId() == checkedId) { vp.setCurrentItem(i); } } } }); } //适配器 private class VpAdapter extends FragmentPagerAdapter { public VpAdapter(FragmentManager fm) { super(fm); } @Override public android.support.v4.app.Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } } }
因为代码中是动态添加radiobutton,所以自己定义drawable来显示radiobutton的样式,下面是drawable的代码
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" > <layer-list> <item android:top="38dp"> <shape> <solid android:color="#00ff00"></solid> </shape> </item> </layer-list> </item> <item android:state_checked="false" android:drawable="@color/transparent"></item> </selector>