android 关于封装tabbar,任意修改样式

来源:互联网 发布:gtp手机吉他谱软件 编辑:程序博客网 时间:2024/06/05 09:18



主要代码:

package com.sun.framework.CustomizeVC;import android.content.Context;import android.graphics.Color;import android.os.Build;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.util.AttributeSet;import android.util.TypedValue;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import com.sun.framework.Utils.ScreenUtils;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.atomic.AtomicInteger;public class TabBar extends LinearLayout {    public int mSelectTextColor;//default Color.WHITE 选择字体颜色    public int mUnSelectTextColor;//default Color.parseColor("#808080") 灰色 没有选择字体颜色    public int mUnSelectTabItemBgColor;//default Color.argb(0,0,0,0) 没有选中的item背景颜色    public int mSelectTabVItemBgColor;//default Color.argb(0,0,0,0) 选中的item背景颜色    public int mDefaultSelectIndex;//default 0    public Boolean mIsFullScreen;//default false 是否全屏    public Boolean mIsFragRemove;//default false 使用Remove frag的逻辑  true 使用hide frag的逻辑    public Boolean mIsShowTabBarView;//default true 是否显示TabBarView    public int[] mSelectImageVIconArray;    public int[] mUnSelectImageVIconArray;    public int[] mSelectTextColorArray;    public int[] mUnSelectTextColorArray;    public Class<?>[] mTabFragmentClassArray;    public String[] mTextVTitleArray;    public float mTabBarHeight; //default 49    public float mTabBar_ImageV_Height; //default 25    public float mTabBar_ImageV_Width;//default 25    public float mTabBar_TextV_Height;//default WRAP_CONTENT    public float mTabBar_TextV_Width;//default WRAP_CONTENT    public int mTabBarViewBackgroundColor;//default Color.rgb(0,0,0) tabbar背景颜色    private List<Fragment> fragLst;    private Map<Object, Fragment> tabFragS;    private FrameLayout tabFragContainer;    public LinearLayout tabBarView;    private List<View> tabLst;    private int preSelectIndex = -1;    private Context context;    private ScreenUtils screenUtils;    private OnTabSelectedChangingListener onTabSelectedChangingListener;    public TabBar(Context context) {        super(context);        this.context = context;        commonInit();    }    public TabBar(Context context, AttributeSet attrs) {        super(context, attrs);        this.context = context;        commonInit();    }    public TabBar(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    private void commonInit() {        this.setOrientation(VERTICAL);        screenUtils = new ScreenUtils(context);        mIsFullScreen = false;        mIsFragRemove = false;        mIsShowTabBarView = true;        mTabBarHeight = 49;//ViewGroup.LayoutParams.WRAP_CONTENT;        mTabBar_ImageV_Height = 25;        mTabBar_ImageV_Width = 25;        mTabBar_TextV_Height = ViewGroup.LayoutParams.WRAP_CONTENT;        mTabBar_TextV_Width = ViewGroup.LayoutParams.WRAP_CONTENT;        mTabBarViewBackgroundColor = Color.rgb(0, 0, 0);        mUnSelectTabItemBgColor = Color.argb(0, 0, 0, 0);        mSelectTabVItemBgColor = Color.argb(0, 0, 0, 0);        mUnSelectTextColor = Color.parseColor("#808080");        mSelectTextColor = Color.WHITE;        mDefaultSelectIndex = 0;    }    public void refreshTabBar() {        if (this.getChildCount() > 0) {            this.removeAllViews();        }        tabLst = new ArrayList<View>();        fragLst = new ArrayList<Fragment>();        tabFragS = new HashMap<Object, Fragment>();        tabFragContainer = new FrameLayout(context);        tabFragContainer.setBackgroundColor(Color.WHITE);        if (mIsShowTabBarView) {            tabBarView = new LinearLayout(context);            tabBarView.setBackgroundColor(mTabBarViewBackgroundColor);        }        if (!mIsFullScreen) {            this.addView(tabFragContainer);            if (mIsShowTabBarView) {                this.addView(tabBarView);            }        } else {            RelativeLayout relativeLayout = new RelativeLayout(context);            LinearLayout linearLayout = new LinearLayout(context);            linearLayout.addView(tabFragContainer);            relativeLayout.addView(linearLayout);            RelativeLayout.LayoutParams relativeLayoutLayoutParams = (RelativeLayout.LayoutParams) linearLayout.getLayoutParams();            relativeLayoutLayoutParams.height = LayoutParams.MATCH_PARENT;            relativeLayoutLayoutParams.width = LayoutParams.MATCH_PARENT;            if (mIsShowTabBarView) {                LinearLayout linearLayout2 = new LinearLayout(context);                linearLayout2.addView(tabBarView);                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);                params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1);                linearLayout2.setLayoutParams(params);                relativeLayout.addView(linearLayout2);            }            this.addView(relativeLayout);        }        if (mIsShowTabBarView) {            LayoutParams tabContLayoutParams = (LayoutParams) tabBarView.getLayoutParams();            tabContLayoutParams.height = screenUtils.dp2px(mTabBarHeight);            tabContLayoutParams.width = LayoutParams.MATCH_PARENT;            //tabContLayoutParams.weight=0;        }        LayoutParams tabPageContLayoutParams = (LayoutParams) tabFragContainer.getLayoutParams();        tabPageContLayoutParams.height = LayoutParams.MATCH_PARENT;        tabPageContLayoutParams.width = LayoutParams.MATCH_PARENT;        tabPageContLayoutParams.weight = 1;        if (mIsShowTabBarView) {            for (int i = 0; i < mSelectImageVIconArray.length; i++)                AddTab(i);            if (mDefaultSelectIndex != -1)                On_TablClick_Listner.onClick(tabLst.get(mDefaultSelectIndex));        } else {            AddTabFrag(mTabFragmentClassArray[mDefaultSelectIndex]);        }    }    public void setOnTabSelectedChangingListener(            OnTabSelectedChangingListener onTabSelectedChangingListener) {        this.onTabSelectedChangingListener = onTabSelectedChangingListener;    }    public void SwitchTabBar(int tabBarIndex) {        if (mIsShowTabBarView) {            if (tabBarIndex < 0 || tabBarIndex > tabLst.size())                return;            View sender = tabLst.get(tabBarIndex);            this.On_TablClick_Listner.onClick(sender);        } else {            AddTabFrag(mTabFragmentClassArray[tabBarIndex]);        }    }    protected void onLayout(boolean changed, int l, int t, int r, int b) {        super.onLayout(changed, l, t, r, b);        this.setOrientation(LinearLayout.VERTICAL);    }    Fragment currentFrag;    private void AddTabFrag(Class<?> fragClass) {        FragmentManager fm = ((FragmentActivity) this.getContext()).getSupportFragmentManager();        FragmentTransaction tran = fm.beginTransaction();        if (mIsFragRemove) {            if (currentFrag != null) {                tran.remove(currentFrag);            }            FrameLayout layout = new FrameLayout(this.getContext());            layout.setId(ViewIdGenerator.generateViewId());            tabFragContainer.addView(layout);            layout.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;            layout.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;            Fragment frag = null;            try {                frag = (Fragment) fragClass.newInstance();                tran.add(layout.getId(), frag);                tran.show(frag);                currentFrag = frag;            } catch (InstantiationException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            }        } else {            Collection<Fragment> aCollection = tabFragS.values();            for (Fragment fragment : aCollection) {                // if (fragment.isVisible()) {                tran.hide(fragment);                // }            }            try {                Fragment frag = tabFragS.get(fragClass.getName());                if (frag == null) {                    FrameLayout layout = new FrameLayout(this.getContext());                    layout.setId(ViewIdGenerator.generateViewId());                    tabFragContainer.addView(layout);                    layout.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;                    layout.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;                    frag = (Fragment) fragClass.newInstance();                    tran.add(layout.getId(), frag);                    fragLst.add(frag);                    tabFragS.put(fragClass.getName(), frag);                }                tran.show(frag);            } catch (InstantiationException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            }        }        //tran.addToBackStack(null);        tran.commit();    }    private void AddTab(int index) {        LinearLayout tab = new LinearLayout(this.getContext());        tab.setOrientation(VERTICAL);        tab.setBackgroundColor(mUnSelectTabItemBgColor);        tabBarView.addView(tab);        LayoutParams params = (LayoutParams) tab.getLayoutParams();        params.weight = 1;        params.height = screenUtils.dp2px(mTabBarHeight);        params.width = ViewGroup.LayoutParams.MATCH_PARENT;        tab.setClickable(true);        ImageView img = new ImageView(getContext());        tab.addView(img);        params = (LayoutParams) img.getLayoutParams();        params.width = screenUtils.dp2px(mTabBar_ImageV_Width);        params.height = screenUtils.dp2px(mTabBar_ImageV_Height);        params.gravity = Gravity.CENTER;        params.topMargin = screenUtils.dp2px(5);        img.setImageResource(mUnSelectImageVIconArray[index]);        TextView tv = new TextView(getContext());        tab.addView(tv);        params = (LayoutParams) tv.getLayoutParams();        params.width = screenUtils.dp2px(mTabBar_TextV_Width);        params.height = screenUtils.dp2px(mTabBar_TextV_Height);        params.gravity = Gravity.CENTER;        params.bottomMargin = screenUtils.dp2px(5);        if (mUnSelectTextColorArray != null) {            tv.setTextColor(mUnSelectTextColorArray[index]);        } else {            tv.setTextColor(mUnSelectTextColor);        }        tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);        tv.setText(mTextVTitleArray[index]);        tab.setOnClickListener(On_TablClick_Listner);        tabLst.add(tab);    }    OnClickListener On_TablClick_Listner = new OnClickListener() {        @Override        public void onClick(View v) {            int index = tabLst.indexOf(v);            if (preSelectIndex == index) return;            if (onTabSelectedChangingListener != null && !onTabSelectedChangingListener.OnTabSelectedChanging(v, index))                return;            if (preSelectIndex != -1) {                ViewGroup tab = (ViewGroup) tabLst.get(preSelectIndex);                tab.setBackgroundColor(mUnSelectTabItemBgColor);                ((ImageView) tab.getChildAt(0)).setImageResource(mUnSelectImageVIconArray[preSelectIndex]);                int color;                if (mUnSelectTextColorArray != null) {                    color = mUnSelectTextColorArray[preSelectIndex];                } else {                    color = mUnSelectTextColor;                }                ((TextView) tab.getChildAt(1)).setTextColor(color);            }            preSelectIndex = index;            ViewGroup currTab = (ViewGroup) v;            currTab.setBackgroundColor(mSelectTabVItemBgColor);            ((ImageView) currTab.getChildAt(0)).setImageResource(mSelectImageVIconArray[preSelectIndex]);            int color;            if (mSelectTextColorArray != null) {                color = mSelectTextColorArray[preSelectIndex];            } else {                color = mSelectTextColor;            }            ((TextView) currTab.getChildAt(1)).setTextColor(color);            AddTabFrag(mTabFragmentClassArray[index]);        }    };    public interface OnTabSelectedChangingListener {        boolean OnTabSelectedChanging(View sender, int index);    }    public static class ViewIdGenerator {        private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);        public static int generateViewId() {            if (Build.VERSION.SDK_INT < 17) {                for (; ; ) {                    final int result = sNextGeneratedId.get();                    // aapt-generated IDs have the high byte nonzero; clamp to the range under that.                    int newValue = result + 1;                    if (newValue > 0x00FFFFFF)                        newValue = 1; // Roll over to 1, not 0.                    if (sNextGeneratedId.compareAndSet(result, newValue)) {                        return result;                    }                }            } else {                return View.generateViewId();            }        }    }}



activity_main.xml

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android">    <data class="MainBinding">    </data>    <LinearLayout        android:id="@+id/activity_main"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <com.sun.framework.CustomizeVC.TabBar            android:id="@+id/tabBar"            android:layout_width="match_parent"            android:layout_height="match_parent">        </com.sun.framework.CustomizeVC.TabBar>        <RelativeLayout            android:layout_width="wrap_content"            android:layout_height="match_parent">        </RelativeLayout>    </LinearLayout>


使用:

package com.example.apple.test4;import android.databinding.DataBindingUtil;import android.graphics.Color;import android.os.Bundle;import com.example.apple.test4.databinding.MainBinding;import com.sun.framework.CustomizeVC.SubFragmentActivity;import com.sun.framework.CustomizeVC.TabBar;public class MainActivity extends SubFragmentActivity {    MainBinding binding;    public TabBar tabBar;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);        tabBar = binding.tabBar;        tabBar.mSelectTextColorArray = new int[]{Color.RED,Color.RED,Color.GREEN,Color.YELLOW,Color.WHITE};        //tabBar.isShowTabBarView = false;        //tabBar.mDefaultSelectIndex = 4;        tabBar.mTextVTitleArray = new String[]{"预报","列表","首页","地图","设置"};        tabBar.mSelectImageVIconArray = new int[]{R.drawable.ditu_hov,R.drawable.ditu_hov,R.drawable.ditu_hov,R.drawable.ditu_hov,R.drawable.ditu_hov};        tabBar.mUnSelectImageVIconArray = new int[]{R.drawable.ditu_hov,R.drawable.ditu_hov,R.drawable.ditu_hov,R.drawable.ditu_hov,R.drawable.ditu_hov};        tabBar.mTabFragmentClassArray = new Class<?>[]{ForecastFragment.class,HomeFragment.class,ForecastFragment.class,ForecastFragment.class,ForecastFragment.class};        tabBar.refreshTabBar();    }}


原创粉丝点击