Android提高十八篇之自定义MenuTabMenuWord格式.docx
- 文档编号:19001898
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:10
- 大小:247.75KB
Android提高十八篇之自定义MenuTabMenuWord格式.docx
《Android提高十八篇之自定义MenuTabMenuWord格式.docx》由会员分享,可在线阅读,更多相关《Android提高十八篇之自定义MenuTabMenuWord格式.docx(10页珍藏版)》请在冰豆网上搜索。
fromYDelta="
100%p"
android:
toYDelta="
0"
duration="
1000"
/>
alphaandroid:
fromAlpha="
0.0"
toAlpha="
/set>
新建文件popup_exit.xml:
在工程的values文件夹里新建文件popup_animation.xml:
resources>
<
stylename="
PopupAnimation"
parent="
android:
Animation"
itemname="
windowEnterAnimation"
@anim/popup_enter<
/item>
windowExitAnimation"
@anim/popup_exit<
/style>
/resources>
main.xml的源码如下:
LinearLayoutandroid:
id="
@+id/LinearLayout01"
layout_width="
fill_parent"
layout_height="
xmlns:
TextViewandroid:
@+id/TextView01"
wrap_content"
text="
扩展Menu----hellogv"
/TextView>
/LinearLayout>
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<
count;
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){
*自定义Adapter,TabMenu的分页标签部分
staticpublicclassMenuTitleAdapterextendsBaseAdapter{
privateintfontColor,unselcolor,selcolor;
privateTextView[]title;
/**
*设置TabMenu的title
*@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<
titles.length;
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)
{
title.length;
title[i].setBackgroundDrawable(newColorDrawable(unselcolor));
//设置没选中的颜色
//设置没选中项的字体颜色
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的使用,源码如下:
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.widget.AdapterView;
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,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 提高 十八 自定义 MenuTabMenu