id="@+id/TextView01"android:
layout_height="wrap_content"
android:
layout_width="fill_parent"android:
text="扩展Menu----hellogv">
TabMenu的封装类TabMenu.java的源码如下:
packagecom.testTabMenu;
importandroid.content.Context;
importandroid.graphics.Color;
importandroid.graphics.drawable.ColorDrawable;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.GridView;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.PopupWindow;
importandroid.widget.TextView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.LinearLayout.LayoutParams;
publicclassTabMenuextendsPopupWindow{
privateGridViewgvBody,gvTitle;
privateLinearLayoutmLayout;
privateMenuTitleAdaptertitleAdapter;
publicTabMenu(Contextcontext,OnItemClickListenertitleClick,OnItemClickListenerbodyClick,
MenuTitleAdaptertitleAdapter,intcolorBgTabMenu,intaniTabMenu){
super(context);
mLayout=newLinearLayout(context);
mLayout.setOrientation(LinearLayout.VERTICAL);
//标题选项栏
gvTitle=newGridView(context);
gvTitle.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
gvTitle.setNumColumns(titleAdapter.getCount());
gvTitle.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
gvTitle.setVerticalSpacing
(1);
gvTitle.setHorizontalSpacing
(1);
gvTitle.setGravity(Gravity.CENTER);
gvTitle.setOnItemClickListener(titleClick);
gvTitle.setAdapter(titleAdapter);
gvTitle.setSelector(newColorDrawable(Color.TRANSPARENT));//选中的时候为透明色
this.titleAdapter=titleAdapter;
//子选项栏
gvBody=newGridView(context);
gvBody.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
gvBody.setSelector(newColorDrawable(Color.TRANSPARENT));//选中的时候为透明色
gvBody.setNumColumns(4);
gvBody.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
gvBody.setVerticalSpacing(10);
gvBody.setHorizontalSpacing(10);
gvBody.setPadding(10,10,10,10);
gvBody.setGravity(Gravity.CENTER);
gvBody.setOnItemClickListener(bodyClick);
mLayout.addView(gvTitle);
mLayout.addView(gvBody);
//设置默认项
this.setContentView(mLayout);
this.setWidth(LayoutParams.FILL_PARENT);
this.setHeight(LayoutParams.WRAP_CONTENT);
this.setBackgroundDrawable(newColorDrawable(colorBgTabMenu));//设置TabMenu菜单背景
this.setAnimationStyle(aniTabMenu);
this.setFocusable(true);//menu菜单获得焦点如果没有获得焦点menu菜单中的控件事件无法响应
}
publicvoidSetTitleSelect(intindex)
{
gvTitle.setSelection(index);
this.titleAdapter.SetFocus(index);
}
publicvoidSetBodySelect(intindex,intcolorSelBody)
{
intcount=gvBody.getChildCount();
for(inti=0;i {
if(i!
=index)
((LinearLayout)gvBody.getChildAt(i)).setBackgroundColor(Color.TRANSPARENT);
}
((LinearLayout)gvBody.getChildAt(index)).setBackgroundColor(colorSelBody);
}
publicvoidSetBodyAdapter(MenuBodyAdapterbodyAdapter)
{
gvBody.setAdapter(bodyAdapter);
}
/**
*自定义Adapter,TabMenu的每个分页的主体
*
*/
staticpublicclassMenuBodyAdapterextendsBaseAdapter{
privateContextmContext;
privateintfontColor,fontSize;
privateString[]texts;
privateint[]resID;
/**
*设置TabMenu的分页主体
*@paramcontext调用方的上下文
*@paramtexts按钮集合的字符串数组
*@paramresID按钮集合的图标资源数组
*@paramfontSize按钮字体大小
*@paramcolor按钮字体颜色
*/
publicMenuBodyAdapter(Contextcontext,String[]texts,int[]resID,intfontSize,intfontColor)
{
this.mContext=context;
this.fontColor=fontColor;
this.texts=texts;
this.fontSize=fontSize;
this.resID=resID;
}
publicintgetCount(){
returntexts.length;
}
publicObjectgetItem(intposition){
returnmakeMenyBody(position);
}
publiclonggetItemId(intposition){
returnposition;
}
privateLinearLayoutmakeMenyBody(intposition)
{
LinearLayoutresult=newLinearLayout(this.mContext);
result.setOrientation(LinearLayout.VERTICAL);
result.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
result.setPadding(10,10,10,10);
TextViewtext=newTextView(this.mContext);
text.setText(texts[position]);
text.setTextSize(fontSize);
text.setTextColor(fontColor);
text.setGravity(Gravity.CENTER);
text.setPadding(5,5,5,5);
ImageViewimg=newImageView(this.mContext);
img.setBackgroundResource(resID[position]);
result.addView(img,newLinearLayout.LayoutParams(newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)));
result.addView(text);
returnresult;
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
returnmakeMenyBody(position);
}
}
/**
*自定义Adapter,TabMenu的分页标签部分
*
*/
staticpublicclassMenuTitleAdapterextendsBaseAdapter{
privateContextmContext;
privateintfontColor,unselcolor,selcolor;
privateTextView[]title;
/**
*设置TabMenu的title
*@paramcontext调用方的上下文
*@paramtitles分页标签的字符串数组
*@paramfontSize字体大小
*@paramfontcolor字体颜色
*@paramunselcolor未选中项的背景色
*@paramselcolor选中项的背景色
*/
publicMenuTitleAdapter(Contextcontext,String[]titles,intfontSize,
intfontcolor,intunselcolor,intselcolor){
this.mContext=context;
this.fontColor=fontcolor;
this.unselcolor=unselcolor;
this.selcolor=selcolor;
this.title=newTextView[titles.length];
for(inti=0;i title[i]=newTextView(mContext);
title[i].setText(titles[i]);
title[i].setTextSize(fontSize);
title[i].setTextColor(fontColor);
title[i].setGravity(Gravity.CENTER);
title[i].setPadding(10,10,10,10);
}
}
publicintgetCount(){
returntitle.length;
}
publicObjectgetItem(intposition){
returntitle[position];
}
publiclonggetItemId(intposition){
returntitle[position].getId();
}
/**
*设置选中的效果
*/
privatevoidSetFocus(intindex)
{
for(inti=0;i
{
if(i!
=index)
{
title[i].setBackgroundDrawable(newColorDrawable(unselcolor));//设置没选中的颜色
title[i].setTextColor(fontColor);//设置没选中项的字体颜色
}
}
title[index].setBackgroundColor(0x00);//设置选中项的颜色
title[index].setTextColor(selcolor);//设置选中项的字体颜色
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
Viewv;
if(convertView==null){
v=title[position];
}else{
v=convertView;
}
returnv;
}
}
}
testTabMenu介绍了数据的定义以及TabMenu的使用,源码如下:
packagecom.testTabMenu;
importandroid.app.Activity;
importandroid.graphics.Color;
importandroid.os.Bundle;
importandroid.view.Gravity;
importandroid.view.Menu;
importandroid.view.View;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.Toast;
publicclasstestTabMenuextendsActivity{
TabMenu.MenuBodyAdapter[]bodyAdapter=newTabMenu.MenuBodyAdapter[3];
TabMenu.MenuTitleAdaptertitleAdapter;
TabMenutabMenu;
intselTitle=0;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//设置分页栏的标题
titleAdapter=newTabMenu.MenuTitleAdapter(this,newString[]{"常用",
"设置","工具"},16,0xFF222222,Color.LTGRAY,Color.WHITE);
//定义每项分页栏的内容
bodyAdapter[0]=newTabMenu.MenuBodyAdapter(this,newString[]{"常用1","常用2",},
newint[]{R.drawable.menu_test,