关于TabLayout的使用 ,自定义了一个框架。。。 以后写底部菜单就可以直接作为依赖库 ,不用麻烦了,tablayout框架
关于TabLayout的使用 ,自定义了一个框架。。。 以后写底部菜单就可以直接作为依赖库 ,不用麻烦了,tablayout框架
首先,简单的说一下,这个底部框架的实现步骤。
1,自定义一个类,继承LinearLayout就好了 ,因为我喜欢用LinearLayout, 当然你也可以继承RelativeLayout。
2,重写它两个带参数的构造方法。
3,进入内容的编写,布局文件的处理,数据的处理。
4,给底部容器添加view,底部菜单实现的一个页面切换。
好了,由于个人的表诉能力 。直接上代码好了
package com.weight.tabbottomlib.view;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* 底部切换框架
*
* @author Administrator
*
*/
public class MyBottomLayout extends LinearLayout {
static ArrayList<Item> itemData = new ArrayList<Item>();
static ArrayList<View> viewArryItem = new ArrayList<View>();
LayoutInflater inflater; // 布局管理器
View mainView; // 这个是底部的容器
View viewItem;
int itemSize = 0;
public MyBottomLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 给底部的容器添加view
*
* @param view
*/
public void addBottomLayoutValue(ArrayList<Item> itemData) {
LayoutInflater inflater = LayoutInflater.from(getContext());
this.itemData = itemData;
this.itemSize = itemData.size();
for (int i = 0; i < itemData.size(); i++) {
View viewItem = inflater.inflate(R.layout.layout_tab_item, null);
viewItem.findViewById(R.id.tabImg).setBackgroundResource(
itemData.get(i).getDrawableNormalId());
TextView textView = ((TextView) (viewItem
.findViewById(R.id.tabText)));
textView.setText(itemData.get(i).getName());
textView.setTextColor(Color.WHITE);
this.addView(viewItem, new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1.0f));
viewItem.setId(i);
viewArryItem.add(viewItem);
viewItem.setOnClickListener(new lister());
}
// 处理一下整理的数据
changeDataState();
}
/**
* 改变一下那个数据的状态
*/
private void changeDataState() {
if (itemSize != 5) { // 不需要处理
for (int i = itemSize; i < 5; i++) {
itemData.add(new Item());
LayoutInflater inflater = LayoutInflater.from(getContext());
View viewItem = inflater
.inflate(R.layout.layout_tab_item, null);
viewArryItem.add(viewItem);
}
}
}
public interface ICallbackLister {
public void click(int id);
}
ICallbackLister callbackLister = null;
public void setOnCallbackLister(ICallbackLister callbackLister) {
this.callbackLister = callbackLister;
}
/**
*
* @ClassName: lister
* @Description:tab点击事件的处理
* @author lumin
* @date 2015-10-25 下午12:53:36
*
*/
private class lister implements OnClickListener {
@Override
public void onClick(View clickView) {
callbackLister.click(clickView.getId());
initBottom(clickView.getId());
}
}
public static void initBottom(int id) {
switch (id) {
case 0:
// 第二步:实现页面的一个切换
initData(itemData.get(0).getDrawableSelectId(), itemData.get(1)
.getDrawableNormalId(), itemData.get(2)
.getDrawableNormalId(), itemData.get(3)
.getDrawableNormalId(), itemData.get(4)
.getDrawableNormalId());
changeTextColor(
(TextView) (viewArryItem.get(0).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(1).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(2).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(3).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(4).findViewById(R.id.tabText)));
break;
case 1:
initData(itemData.get(0).getDrawableNormalId(), itemData.get(1)
.getDrawableSelectId(), itemData.get(2)
.getDrawableNormalId(), itemData.get(3)
.getDrawableNormalId(), itemData.get(4)
.getDrawableNormalId());
changeTextColor(
(TextView) (viewArryItem.get(1).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(0).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(2).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(3).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(4).findViewById(R.id.tabText)));
break;
case 2:
initData(itemData.get(0).getDrawableNormalId(), itemData.get(1)
.getDrawableNormalId(), itemData.get(2)
.getDrawableSelectId(), itemData.get(3)
.getDrawableNormalId(), itemData.get(4)
.getDrawableNormalId());
changeTextColor(
(TextView) (viewArryItem.get(2).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(0).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(1).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(3).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(4).findViewById(R.id.tabText)));
break;
case 3:
initData(itemData.get(0).getDrawableNormalId(), itemData.get(1)
.getDrawableNormalId(), itemData.get(2)
.getDrawableNormalId(), itemData.get(3)
.getDrawableSelectId(), itemData.get(4)
.getDrawableNormalId());
changeTextColor(
(TextView) (viewArryItem.get(3).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(0).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(1).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(2).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(4).findViewById(R.id.tabText)));
break;
case 4:
initData(itemData.get(0).getDrawableNormalId(), itemData.get(1)
.getDrawableNormalId(), itemData.get(2)
.getDrawableNormalId(), itemData.get(3)
.getDrawableNormalId(), itemData.get(4)
.getDrawableSelectId());
changeTextColor(
(TextView) (viewArryItem.get(4).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(0).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(1).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(2).findViewById(R.id.tabText)),
(TextView) (viewArryItem.get(3).findViewById(R.id.tabText)));
break;
}
}
/**
*
* @param resIdOne
* @param resIdTwo
* @param resIdThree
* @param resIdFour
* @param resIdFive
*/
public static void initData(int resIdOne, int resIdTwo, int resIdThree,
int resIdFour, int resIdFive) {
try {
viewArryItem.get(0).findViewById(R.id.tabImg)
.setBackgroundResource(resIdOne);
viewArryItem.get(1).findViewById(R.id.tabImg)
.setBackgroundResource(resIdTwo);
viewArryItem.get(2).findViewById(R.id.tabImg)
.setBackgroundResource(resIdThree);
viewArryItem.get(3).findViewById(R.id.tabImg)
.setBackgroundResource(resIdFour);
viewArryItem.get(4).findViewById(R.id.tabImg)
.setBackgroundResource(resIdFive);
} catch (Exception err) {
err.printStackTrace();
// 报错的时候说明已经没有那么多的item了
}
}
/**
*
* @param txtOne
* 这