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(); }}
阅读全文
0 0
- android 关于封装tabbar,任意修改样式
- android 中样式修改关于shape 的相关问题
- android spinner修改样式
- Android系统样式修改
- android SearchView 样式修改
- Android修改spinner样式
- Android 修改ActionBar样式
- Android button样式修改
- android修改checkbox样式
- android状态栏样式修改
- Android修改光标样式
- Android TimePiker 样式修改
- Android修改状态栏样式
- Swift tabbar样式设置
- 关于JavaScript修改CSS样式
- 关于修改select默认样式
- 自定义Tabbar封装
- RN封装Tabbar
- mark标记输入流中的当前位置,以便使用reset方法复制到该标记的位置 reset将当前位置复位为上次调用mark方法标记的位置
- 169.Majority Element
- 【Linux】ubuntu首次给root用户设置密码
- [RK3288][Android6.0] 调试笔记 --- ComponentName的使用
- zzuli2174
- android 关于封装tabbar,任意修改样式
- 购物车AngularJs
- 在GitHub多个帐号上添加SSH公钥
- KazaQ's Socks
- Js中JSON.stringify()、JSON.parse()、eval()详解
- Java-科学计数法 (20)
- idea使用maven创建java web项目
- 实践
- EditText 去掉下划线 仿微信边框 selector