自定义TabMenu方便使用
开发过程中我们经常会这样的需求,搭建项目框架的时候需要创建低下四个Tab,刚好项目空闲时间,再次为大家抽离了自己项目中封装的Tab 方便大家使用 调用,有很好的定制型,可以根据项目的需求自己实现自己想要的效果。
packagecom.fanwe.library.view;
importandroid.content.Context;
importandroid.graphics.Color;
importandroid.util.AttributeSet;
importandroid.widget.ImageView;
importandroid.widget.TextView;
importcom.fanwe.library.R;
importcom.fanwe.library.utils.SDViewBinder;
importcom.fanwe.library.view.select.SDSelectViewAuto;
public classSDTabMenuextendsSDSelectViewAuto
{
publicImageViewmIvTitle;
publicTextViewmTvTitle;
publicTextViewmTvNumbr;
publicSDTabMenu(Context context,AttributeSet attrs)
{
super(context,attrs);
init();
}
publicSDTabMenu(Context context)
{
super(context);
init();
}
@Override
protected voidinit()
{
setContentView(R.layout.view_tab_menu);
mIvTitle= (ImageView) findViewById(R.id.iv_title);
mTvTitle= (TextView) findViewById(R.id.tv_title);
mTvNumbr= (TextView) findViewById(R.id.tv_number);
addAutoView(mIvTitle,mTvNumbr,mTvTitle);
setDefaultConfig();
onNormal();
setTextTitleNumber(null);
super.init();
}
@Override
public voidsetDefaultConfig()
{
getViewConfig(mTvTitle).setTextColorNormal(Color.GRAY);
getViewConfig(mTvTitle).setTextColorSelected(mLibraryConfig.getmMainColor());
super.setDefaultConfig();
}
public voidsetTextTitleNumber(String content)
{
SDViewBinder.setTextViewsVisibility(mTvNumbr,content);
}
public voidsetTextTitle(String content)
{
SDViewBinder.setTextViewsVisibility(mTvTitle,content);
}
public voidsetBackgroundTextTitleNumber(intresId)
{
mTvNumbr.setBackgroundResource(resId);
}
publicvoidsetVisibilityTextTitleNumber(intvisibility){
mTvNumbr.setVisibility(visibility);
}
}
//布局如下
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical">
android:id="@+id/act_main_fl_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
android:id="@+id/act_main_ll_bottom_menu"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
android:id="@+id/tab0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_white_gray_stroke_top"/>
android:id="@+id/tab1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_white_gray_stroke_top"/>
android:id="@+id/tab2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_white_gray_stroke_top"/>
android:id="@+id/tab3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_white_gray_stroke_top"/>
android:id="@+id/tab4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone"
android:background="@drawable/selector_white_gray_stroke_top"/>
//布局就是简单的一个线性布局包含了 一个帧布局和一个线性布局里面包含我们自定义的Tab,这种也比较方便,这样只是减少繁琐的添加取消有一定的灵活性
//接下来就是我们最主要的如何使用了
最基础的地方就省略
private voidinitBottom()
{
mTab0.setBackgroundTextTitleNumber(R.drawable.bg_number);
mTab1.setBackgroundTextTitleNumber(R.drawable.bg_number);
mTab2.setBackgroundTextTitleNumber(R.drawable.bg_number);
mTab3.setBackgroundTextTitleNumber(R.drawable.bg_number);
mTab4.setBackgroundTextTitleNumber(R.drawable.bg_number);
mTab0.setTextTitle(SDResourcesUtil.getString(R.string.home));
mTab1.setTextTitle(SDResourcesUtil.getString(R.string.supplier));
mTab2.setTextTitle(SDResourcesUtil.getString(R.string.shopcart));
mTab3.setTextTitle(SDResourcesUtil.getString(R.string.mine));
mTab4.setTextTitle(SDResourcesUtil.getString(R.string.more));
mTab0.getViewConfig(mTab0.mIvTitle).setImageNormalResId(R.drawable.button_home_close).setImageSelectedResId(R.drawable.butt_home_open);
mTab1.getViewConfig(mTab1.mIvTitle).setImageNormalResId(R.drawable.button_market_close).setImageSelectedResId(R.drawable.button_market_open);
mTab2.getViewConfig(mTab2.mIvTitle).setImageNormalResId(R.drawable.button_shopping_close).setImageSelectedResId(R.drawable.button_shopping_open);
mTab3.getViewConfig(mTab3.mIvTitle).setImageNormalResId(R.drawable.button_my_close).setImageSelectedResId(R.drawable.button_my_open);
mTab4.getViewConfig(mTab4.mIvTitle).setImageNormalResId(R.drawable.tab_4_normal).setImageSelectedResId(R.drawable.tab_4_press);
mTab0.getViewConfig(mTab0.mTvTitle).setTextColorNormalResId(R.color.text_home_menu_normal)
.setTextColorSelectedResId(R.color.text_home_menu_selected);
mTab1.getViewConfig(mTab1.mTvTitle).setTextColorNormalResId(R.color.text_home_menu_normal)
.setTextColorSelectedResId(R.color.text_home_menu_selected);
mTab2.getViewConfig(mTab2.mTvTitle).setTextColorNormalResId(R.color.text_home_menu_normal)
.setTextColorSelectedResId(R.color.text_home_menu_selected);
mTab3.getViewConfig(mTab3.mTvTitle).setTextColorNormalResId(R.color.text_home_menu_normal)
.setTextColorSelectedResId(R.color.text_home_menu_selected);
mTab4.getViewConfig(mTab4.mTvTitle).setTextColorNormalResId(R.color.text_home_menu_normal)
.setTextColorSelectedResId(R.color.text_home_menu_selected);
mViewManager.setListener(newSDSelectManagerListener()
{
@Override
public voidonNormal(intindex,SDTabMenu item)
{
}
@Override
public voidonSelected(intindex,SDTabMenu item)
{
mSelectedIndex= index;
switch(index)
{
case0:
click0();
mTab2.setVisibilityTextTitleNumber(View.GONE);
break;
case1:
click1();
mTab2.setVisibilityTextTitleNumber(View.GONE);
break;
case2:
click2();
mTab2.setVisibilityTextTitleNumber(View.VISIBLE);
break;
case3:
click3();
mTab2.setVisibilityTextTitleNumber(View.GONE);
break;
case4:
click4();
break;
default:
break;
}
}
});
SDTabMenu[] items =newSDTabMenu[] {mTab0,mTab1,mTab2,mTab3,mTab4};
【自定义TabMenu方便使用】mViewManager.setItems(items);
mViewManager.performClick(mSelectedIndex);
}
//对应你需要的Tab做相应的处理显示隐藏或者你可以在基类添加一些你需要的东西扩展。
推荐阅读
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 自定义MyAdapter
- Android自定义view实现圆环进度条效果
- Flutter自定义view|Flutter自定义view —— 闯关进度条
- js保留自定义小数点
- django|django 自定义.save()方法
- 如何在Kubernetes|如何在Kubernetes 里添加自定义的 API 对象(一)