radiogroup仿tab+viewpager+fragment

先上图:


不用美工模仿tab

tab由radiogroup自定义而来,加上viewpager和fragment的联动

主页面的代码:

public class MainActivity extends BaseActivity {

	@ViewInject(R.id.rgp_container)
	private RadioGroup rgp_container;
	@ViewInject(R.id.rb_rdio1)
	private RadioButton rb_rdio1;
	@ViewInject(R.id.rb_rdio2)
	private RadioButton rb_rdio2;
	@ViewInject(R.id.rb_rdio3)
	private RadioButton rb_rdio3;
	@ViewInject(R.id.rb_rdio4)
	private RadioButton rb_rdio4;
	@ViewInject(R.id.tab_vpager)
	private ViewPager tab_vpager;

	@SuppressLint("UseSparseArrays")
	private Map<Integer, Fragment> mCacheFragments = new HashMap<Integer, Fragment>();
	private Fragment mFm = null;
	private Bundle bundle = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ViewUtils.inject(this);

		initViewControls();
	}

	private void initViewControls() {
		rgp_container.setOnCheckedChangeListener(changeL);
		tab_vpager.setAdapter(new MyViewPagerAdapter(getSupportFragmentManager()));
		tab_vpager.setOffscreenPageLimit(4);
		tab_vpager.setOnPageChangeListener(pageL);
	}

	private class MyViewPagerAdapter extends FragmentPagerAdapter {

		public MyViewPagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public int getCount() {
			return 4;
		}

		@Override
		public Fragment getItem(int position) {
			if (mCacheFragments.containsKey(position)) {
				mFm = mCacheFragments.get(position);
			} else {
				switch (position) {
				case 0:
					mFm = FragmentTest.newInstance();
					bundle = new Bundle();
					bundle.putString("Title", "项目1");
					mFm.setArguments(bundle);
					break;
				case 1:
					mFm = FragmentTest.newInstance();
					bundle = new Bundle();
					bundle.putString("Title", "项目2");
					mFm.setArguments(bundle);
					break;
				case 2:
					mFm = FragmentTest.newInstance();
					bundle = new Bundle();
					bundle.putString("Title", "项目3");
					mFm.setArguments(bundle);
					break;
				case 3:
					mFm = FragmentTest.newInstance();
					bundle = new Bundle();
					bundle.putString("Title", "项目4");
					mFm.setArguments(bundle);
					break;

				default:
					break;
				}
				mCacheFragments.put(position, mFm);
			}
			return mFm;
		}
	}

	private OnPageChangeListener pageL = new OnPageChangeListener() {

		@Override
		public void onPageSelected(int position) {
			if (position == 0) {
				rb_rdio1.setChecked(true);
			} else if (position == 1) {
				rb_rdio2.setChecked(true);
			} else if (position == 2) {
				rb_rdio3.setChecked(true);
			} else if (position == 3) {
				rb_rdio4.setChecked(true);
			}
		}

		@Override
		public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

		}

		@Override
		public void onPageScrollStateChanged(int state) {

		}
	};

	private OnCheckedChangeListener changeL = new OnCheckedChangeListener() {

		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) {
			switch (checkedId) {
			case R.id.rb_rdio1:
				tab_vpager.setCurrentItem(0, true);
				break;

			case R.id.rb_rdio2:
				tab_vpager.setCurrentItem(1, true);
				break;

			case R.id.rb_rdio3:
				tab_vpager.setCurrentItem(2, true);
				break;

			case R.id.rb_rdio4:
				tab_vpager.setCurrentItem(3, true);
				break;

			default:
				break;
			}
		}
	};

}

主页面的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RadioGroup
        android:id="@+id/rgp_container"
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="20dp"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/rb_rdio1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            android:layout_weight="1"
            android:background="@drawable/radio_left_bg"
            android:button="@null"
            android:checked="true"
            android:gravity="center"
            android:text="@string/rb_str1"
            android:textColor="@color/radio_text_bg" />

        <RadioButton
            android:id="@+id/rb_rdio2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            android:layout_weight="1"
            android:background="@drawable/radio_center_bg"
            android:button="@null"
            android:gravity="center"
            android:text="@string/rb_str2"
            android:textColor="@color/radio_text_bg" />

        <RadioButton
            android:id="@+id/rb_rdio3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            android:layout_weight="1"
            android:background="@drawable/radio_center_bg"
            android:button="@null"
            android:gravity="center"
            android:text="@string/rb_str3"
            android:textColor="@color/radio_text_bg" />

        <RadioButton
            android:id="@+id/rb_rdio4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            android:layout_weight="1"
            android:background="@drawable/radio_rigth_bg"
            android:button="@null"
            android:gravity="center"
            android:text="@string/rb_str4"
            android:textColor="@color/radio_text_bg" />
    </RadioGroup>

    <android.support.v4.view.ViewPager
        android:id="@+id/tab_vpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="5dp"
        android:layout_weight="1" />

</LinearLayout>
radiobutton文字选中颜色设置:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true" android:color="@color/white"/>
    <item android:color="@color/orange"/>

</selector>
最右侧radiobutton未选中背景:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape android:shape="rectangle" >
            <corners
                android:bottomLeftRadius="0dp"
                android:bottomRightRadius="3dp"
                android:topLeftRadius="0dp"
                android:topRightRadius="3dp" />

            <solid android:color="@color/orange" />
        </shape>
    </item>
    <item
        android:bottom="1dp"
        android:left="-1dp"
        android:right="1dp"
        android:top="1dp">
        <shape android:shape="rectangle" >
            <corners
                android:bottomLeftRadius="0dp"
                android:bottomRightRadius="3dp"
                android:topLeftRadius="0dp"
                android:topRightRadius="3dp" />

            <solid android:color="@color/white" />
        </shape>
    </item>

</layer-list>

将上述例子用到实际例子中还是有很不错的效果的:


demo地址:http://download.csdn.net/detail/u011566000/8390325




猜你喜欢

转载自blog.csdn.net/u011566000/article/details/43056815