你的位置:首页 > 操作系统

[操作系统]关于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
* 这个就是默认的需要改变的图片的颜色
* @param txtTwo
* @param txtThree
* @param txtFour
* @param txtFive
*/
public static void changeTextColor(TextView txtOne, TextView txtTwo,
TextView txtThree, TextView txtFour, TextView txtFive) {
txtOne.setTextColor(Color.MAGENTA);
txtTwo.setTextColor(Color.BLUE);
txtThree.setTextColor(Color.BLUE);
txtFour.setTextColor(Color.BLUE);
txtFive.setTextColor(Color.BLUE);
}
}

好了 ,这样就完成了框架的编写, 缺少了什么昵 。。。

下面就给出当前页面的item  。。 和实体。。

首先是布局文件

<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent" >

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true" >

<ImageView
android:id="@+id/tabImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
/>

<TextView
android:id="@+id/tabText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tabImg"
android:layout_centerHorizontal="true"
android:textColor="#ffffff"
android:textSize="16dp" />
</RelativeLayout>

</RelativeLayout>

接着是。。实体文件

package com.weight.tabbottomlib.view;

public class Item {
private int drawableNormalId;
private int drawableSelectId;
private String name;
public Item(int drawableNormalId, int drawableSelectId, String name) {
super();
this.drawableNormalId = drawableNormalId;
this.drawableSelectId = drawableSelectId;
this.name = name;
}
public Item() {
super();
}
public int getDrawableNormalId() {
return drawableNormalId;
}
public void setDrawableNormalId(int drawableNormalId) {
this.drawableNormalId = drawableNormalId;
}
public int getDrawableSelectId() {
return drawableSelectId;
}
public void setDrawableSelectId(int drawableSelectId) {
this.drawableSelectId = drawableSelectId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

 

 

这样就全部实现了。使用的话 要作为一个库的哦,右键你的工程  点击Build Path 下的Config Build Path,进入Android,选择isLibrary  点击ok,就完成了。

然后具体的使用方法,接下来的文章里 我会告诉大家的。