Android提高十八篇之自定义Menu(TabMenu)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 12:42 点击:

快要过年了,在这里先祝广大的技术宅兔年快乐!
       用过UCWEB-Android版的人都应该对其特殊的menu有印象,把menu做成Tab-Menu(支持分页的Menu),可以容纳比Android传统的menu更丰富的内容(Android的menu超过6项则缩略在[更多]里),本文参考网上的例子(作者:CoffeeCole,email:longkefan@foxmail.com),对例子进行简化以及封装,使其作为一个复合控件融入自己的framework。

先来看看本文程序运行的效果:

\

TabMenu本身就是一个PopupWindow,PopupWindow上面放了两个GridView,第一个GridView就是分页标签,位于PopupWindow的顶部,第二个GridView是菜单,位于PopupWindow的主体。为了实现PopupWindow的弹出/退出的动画效果,本文使用了以下代码:

在工程的res文件夹里添加anim子目录,再新建文件popup_enter.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
 <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="1000" />
 <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="1000" />
</set>
 

新建文件popup_exit.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
 <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="1000" />
 <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="1000" />
</set>
 


在工程的values文件夹里新建文件popup_animation.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources>    
    <style name="PopupAnimation" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/popup_enter</item> 
        <item name="android:windowExitAnimation">@anim/popup_exit</item>  
    </style> 
</resources>

 

main.xml的源码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
 android:layout_width="fill_parent" android:layout_height="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android">
 <TextView android:id="@+id/TextView01" android:layout_height="wrap_content"
  android:layout_width="fill_parent" android:text="扩展Menu----hellogv"></TextView>
</LinearLayout>
 

TabMenu的封装类TabMenu.java的源码如下:

package com.testTabMenu;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout.LayoutParams;
public class TabMenu extends PopupWindow{
 private GridView gvBody, gvTitle;
 private LinearLayout mLayout;
 private MenuTitleAdapter titleAdapter;
 public TabMenu(Context context,OnItemClickListener titleClick,OnItemClickListener bodyClick,
   MenuTitleAdapter titleAdapter,int colorBgTabMenu,int aniTabMenu){
  super(context);
  
  mLayout = new LinearLayout(context);
  mLayout.setOrientation(LinearLayout.VERTICAL);
  //标题选项栏
  gvTitle = new GridView(context);
  gvTitle.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1