常用RadioGroup+Fragment点击切换,RadioButton图标设置自己想要的位置及大小

1.定义Fragment基类
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * Created by Json on 2017/9/23.
 */

public  abstract class BaseFragment extends Fragment implements View.OnClickListener{

    private static final String STATE_SAVE_IS_HIDDEN = "STATE_SAVE_IS_HIDDEN";
    public  FragmentActivity mActivity;
    private Unbinder bind;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = getActivity();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(getLayoutId(), container, false);
        bind = ButterKnife.bind(this, rootView);
        if (savedInstanceState!=null){
            boolean isSupportHidden=savedInstanceState.getBoolean(STATE_SAVE_IS_HIDDEN);
            FragmentTransaction ft=getFragmentManager().beginTransaction();
            if (isSupportHidden){
                ft.hide(this);
            }else {
                ft.show(this);
            }
            ft.commit();
        }
        return rootView;
    }



    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        initView();
        initData();
        initListener();
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(STATE_SAVE_IS_HIDDEN,isHidden());
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        bind.unbind();
    }



    protected abstract void initView();

    protected abstract void initData();

    protected abstract void initListener();

    public  abstract int getLayoutId() ;

}
2.根据需求几个Fragment继承基类如:
import android.view.View;

import com.huashan.handanbank.R;
import com.huashan.handanbank.baseObject.BaseFragment;

/**
 * Created by Json on 2017/9/23.
 */

public class LifeFragment extends BaseFragment {
    @Override
    protected void initView() {
    }

    @Override
    protected void initData() {

    }

    @Override
    protected void initListener() {

    }

    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public void onClick(View view) {

    }
}
3.主界面使用FragmentTransaction显示或者隐藏Fragment
public class MainActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener{

    @BindView(R.id.rb_header)
    RadioButton rbHeader;
    @BindView(R.id.rb_finance)
    RadioButton rbFinance;
    @BindView(R.id.rb_life)
    RadioButton rbLife;
    @BindView(R.id.rb_mine)
    RadioButton rbMine;
    @BindView(R.id.rg_footer)
    RadioGroup rgFooter;
    private FragmentTransaction transaction;
    private HeaderFragment headerFragment;
    private FinanceFragment financeFragment;
    private LifeFragment lifeFragment;
    private MineFragment mineFragment;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initView();
        initData();
    }

    public void initData() {
        rgFooter.setOnCheckedChangeListener(this);
        rgFooter.check(R.id.rb_header);
    }


    public void initView() {
        //初始化底部四个RadioButton图片
        initFooterButtons();

    }

    private void initFooterButtons() {
        //设置图片在上部 并且使用代码实现图片的大小,在布局中设置图片大小位置不理想
        //参数指的是图片在RadioButton的位置,分别为 左 上 右 下
       rbHeader.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_header_button_select), null, null);

        rbLife.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_life_button_select), null, null);

        rbFinance.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_finance_button_select), null, null);

        rbMine.setCompoundDrawables(null, getRadioButtonDrawable(R.drawable.footer_mine_button_select), null, null);
    }

    /**
     * @param drawableId
     * @return 为图片设置参数 左右距离,上下距离,宽,高
     */
    public Drawable getRadioButtonDrawable(int drawableId) {
        float density = getResources().getDisplayMetrics().density;
        int with = (int) (density * 32);
        Drawable img_mine = getResources().getDrawable(drawableId);
        img_mine.setBounds(0, 0, with, with);
        return img_mine;
    }


    @Override
    public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        transaction = fragmentManager.beginTransaction();
        hideAllFragment(transaction);
        switch (i){
            case R.id.rb_header:
                if (headerFragment==null){
                    headerFragment = new HeaderFragment();
                    transaction.add(R.id.content,headerFragment);
                }else {
                    transaction.show(headerFragment);
                }
                break;
            case R.id.rb_finance:
                if (financeFragment==null){
                    financeFragment = new FinanceFragment();
                    transaction.add(R.id.content,financeFragment);
                }else {
                    transaction.show(financeFragment);
                }
                break;
            case R.id.rb_life:
                if (lifeFragment==null){
                    lifeFragment = new LifeFragment();
                    transaction.add(R.id.content,lifeFragment);
                }else {
                    transaction.show(lifeFragment);
                }
                break;
            case R.id.rb_mine:
                if (mineFragment==null){
                    mineFragment = new MineFragment();
                    transaction.add(R.id.content,mineFragment);
                }else {
                    transaction.show(mineFragment);
                }
                break;
        }
        transaction.commit();
    }

    private void hideAllFragment(FragmentTransaction transaction) {
        if (headerFragment!=null) this.transaction.hide(headerFragment);
        if (financeFragment!=null) this.transaction.hide(financeFragment);
        if (lifeFragment!=null) this.transaction.hide(lifeFragment);
        if (mineFragment!=null) this.transaction.hide(mineFragment);

    }
}
4.布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"></FrameLayout>

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:layout_marginBottom="5dp"
    android:id="@+id/rg_footer"

   >
    <RadioButton
        android:id="@+id/rb_header"
        android:text="首页"
        style="@style/footer_radioButton_style" />
    <RadioButton
        android:id="@+id/rb_finance"
        android:text="金融"
        style="@style/footer_radioButton_style" />
    <RadioButton
        android:id="@+id/rb_life"
        android:text="生活"
        style="@style/footer_radioButton_style" />
    <RadioButton
        android:id="@+id/rb_mine"
        android:text="我的"
        style="@style/footer_radioButton_style"
       />
</RadioGroup>
</LinearLayout>
5.style属性

<style name="footer_radioButton_style">
    <item name="android:gravity">center</item>
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">50dp</item>
    <item name="android:layout_weight">1</item>
    <item name="android:text">14sp</item>
    <item name="android:textColor">@drawable/footer_textcolor_select</item>
    <item name="android:button">@null</item>
</style>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值