RadioButton+Fragment实现Tab切换

第一次写博客 激动啊 - -!
话不多说了,直接上代码:

HomeActivity代码:

public class HomeActivity extends FragmentActivity{
    private FragmentTransaction transaction;
    private RadioGroup radioGroup;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
        /**
         * 设置每个RadioButton的监听事件,然后切换对应的Fragment
         */
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                //开启事务
                transaction = getSupportFragmentManager().beginTransaction();
                switch (i) {
                    case R.id.weixin:
                        transaction.replace(R.id.content, new WeixinFragment());
                        break;
                    case R.id.tongxunlu:
                        transaction.replace(R.id.content, new TongxunluFragment());
                        break;
                    case R.id.friendcircle:
                        transaction.replace(R.id.content, new FriendFragment());
                        break;
                    case R.id.setting:
                        transaction.replace(R.id.content, new SettingFragment());
                        break;
                }
                //事务提交
                transaction.commit();
            }
        });
    }

    /**
     * 一进入主页的时候,自动加载第一页tab
     */
    @Override
    protected void onResume() {
        super.onResume();
        weixin.setChecked(true);
    }
}

接下来是四个Tab选项(在这就写一个,剩下3个大同小异)

public class WeixinFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.tab_weixin,container,false);
    }
}

首页xml(顶部和底部事先写好 ,然后直接include即可,中部是一个FrameLayout占位,然后transaction.replace()替换即可)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".HomeActivity">
    <include layout="@layout/top"></include>
    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#000000"
        android:layout_marginBottom="5dp"/>
    <include layout="@layout/bottom"></include>
</LinearLayout>

这是底部的RadioGroup

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <RadioButton
            android:id="@+id/weixin"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="18sp"
            android:textColor="@color/ziti_color"
            android:drawableTop="@drawable/weixin_selctor"
            android:gravity="center_horizontal"
            android:button="@null"
            android:text="微信"/>
        <RadioButton
            android:id="@+id/tongxunlu"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="18sp"
            android:textColor="@color/ziti_color"
            android:drawableTop="@drawable/address_selctor"
            android:gravity="center_horizontal"
            android:button="@null"
            android:text="通讯录"/>
        <RadioButton
            android:id="@+id/friendcircle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="18sp"
            android:textColor="@color/ziti_color"
            android:drawableTop="@drawable/find_selctor"
            android:gravity="center_horizontal"
            android:button="@null"
            android:text="朋友圈"/>
        <RadioButton
            android:id="@+id/setting"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="18sp"
            android:textColor="@color/ziti_color"
            android:drawableTop="@drawable/setting_selctor"
            android:gravity="center_horizontal"
            android:button="@null"
            android:text="设置"/>
    </RadioGroup>
</LinearLayout>

PS:RadioButton图片跟字体颜色需单独设置selector,代码如下

图片selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/tab_weixin_pressed"></item>
    <item android:drawable="@drawable/tab_weixin_normal"></item>
</selector>

字体颜色selector(在res资源目录里创建一个color的文件夹,然后里面创建字体颜色的selector即可)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#00ff00" android:state_checked="true"></item>
    <item android:color="#969696"></item>
</selector>

—————————————————————————————————————————————————————
有时遇到需要底部中间的那个Tab凸出的效果
在布局的根节点需添加:

android:clipChildren="false"

所有Tab的父布局定高,设置

android:gravity="bottom"

每个Tab也定高(需要凸出的那个Tab高度设置的高一点),设置:

android:gravity="bottom|center_horizontal"

最后代码控制ImageView图片的切换和文字颜色的改变即可,核心代码:

	@OnClick({R.id.ll_home, R.id.ll_my})
    public void clickView(View view) {
        switch (view.getId()) {
            case R.id.ll_home:
                setTab(0);
                break;
            case R.id.ll_my:
                setTab(1);
                break;
        }
    }

    private void setTab(int index) {
        //先都恢复到未选中状态
        iv_home.setImageResource(R.drawable.icon_home_unselected);
        tv_home.setTextColor(Color.parseColor("#cccccc"));
        iv_my.setImageResource(R.drawable.icon_my_unselected);
        tv_my.setTextColor(Color.parseColor("#cccccc"));
        switch (index) {
            case 0:
                iv_home.setImageResource(R.drawable.icon_home_selected);
                tv_home.setTextColor(Color.parseColor("#1296DB"));
                break;
            case 1:
                iv_my.setImageResource(R.drawable.icon_my_selected);
                tv_my.setTextColor(Color.parseColor("#1296DB"));
                break;
        }
    }

效果图如下:
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值