常用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>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章