[Android实例] 教你自定义menu,将系统menu替换之

[Android实例] 教你自定义menu,将系统menu替换之   [复制链接]

   

Rank: 2

精华
0
帖子
30
e币
80 元
跳转到指定楼层
楼主
  发表于 2010-8-12 11:35:12  | 只看该作者  | 倒序浏览
应trace版主之邀请,写一篇关于自定义menu的帖子,废话不说了,直接看下面。
首先,写出自己menu的layout:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/menu" android:visibility="visible"
                android:orientation="horizontal" android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#191919"  android:paddingTop="2dip"
                android:paddingBottom="2dip"
        >
                <Button android:id="@+id/menu_add"
                        android:background="#191919"
                        android:layout_width="0dip" android:layout_weight="0.25" 
                        android:layout_height="wrap_content"
                        android:text ="add"
                        android:textColor="#FFFFFF"
                        android:drawableTop="@drawable/option_add_icon_selector"
                        android:layout_margin="4dip"/>
                <Button android:id="@+id/menu_synchronize"
                        android:background="#191919"
                        android:layout_width="0dip" android:layout_weight="0.25"
                        android:layout_height="wrap_content"
                        android:text ="synchronize"
                        android:textColor="#FFFFFF"
                        android:drawableTop="@drawable/option_synchronize_icon_selector"
                        android:layout_margin="4dip"/>
                <Button android:id="@+id/menu_setting"
                        android:background="#191919"
                        android:layout_width="0dip" android:layout_weight="0.25" 
                        android:layout_height="wrap_content"
                        android:text ="setting"
                        android:textColor="#FFFFFF"
                        android:drawableTop="@drawable/option_setting_icon_selector"
                        android:layout_margin="4dip"/>
                <Button android:id="@+id/menu_exit"
                        android:background="#191919"
                        android:layout_width="0dip" android:layout_weight="0.25"
                        android:layout_height="wrap_content"
                        android:text ="exit"
                        android:textColor="#FFFFFF"
                        android:drawableTop="@drawable/option_exit_icon_selector"
                        android:layout_margin="4dip"/>
</LinearLayout>
其中android:drawableTop的值是自己定义的一个selector,这个就自己看着办了,很简单。
然后要定义一个类,继承自LinearLayout:
public class MyLinearLayout extends LinearLayout {
        private Context context;
        private Button add;
        private Button setting;
        private Button synchronize;
        private Button exit;
        
        public MyLinearLayout(Context context) {
                super(context);
                this.context = context;
                setView();
                // TODO Auto-generated constructor stub
        }

        public MyLinearLayout(Context context, AttributeSet attrs) {
                super(context, attrs);
                this.context = context;
                setView();
                // TODO Auto-generated constructor stub
        }
        
        private void setView() {
                setTag(MyLinearLayout.class);
                
                LayoutInflater mInflate = LayoutInflater.from(context);
                final View menu = mInflate.inflate(R.layout.linearlayout, null);
                menu.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT,100));
                addView(menu);
你也发现了,是和xml文件定义一致的,即用这个类来解析和控制menu,以前menu中的每个Item就是现在的一个Button,可以在Button上添加Listener完成相应的功能。
接下里就是要把menu加入main.xml中:
<com.test.MyLinearLayout 
                        android:id="@+id/linearlayout"
                        android:layout_width="fill_parent" 
                        android:layout_height="wrap_content"
                        android:layout_alignParentBottom="true"/>
将上述代码加入main.xml中,要注意的是一定要保证你的main.xml最外层是RelativeLayout,这样可以控制你的menu在屏幕中的位置如:android:layout_alignParentBottom="true"/且不会挤压其他控件。
接着就是要控制menu怎么显示和隐藏了,在主Activity里,定义一个LinearLayout实例linearLayout = (LinearLayout) findViewById(R.id.linearlayout),且linearLayout.setVisibility(android.view.View.GONE),增加一个方法:
public static void setMenuEvent(LinearLayout layout) {
                if(layout.getVisibility() == android.view.View.GONE) {
                        layout.setVisibility(android.view.View.VISIBLE);
                        Log.d("menu", "!!!!!!I am here   Nothidden");
                }else{
                        layout.setVisibility(android.view.View.GONE);
                        Log.d("menu", "!!!!!!I am here   hidden");
                }
        }
重写一个方法:
@Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if (keyCode == KeyEvent.KEYCODE_MENU) {
//                        LinearLayout menu = (LinearLayout)findViewById(R.id.menu);
//                        LinearLayout l = new LinearLayout(this);
//                        l.setVisibility(android.view.View.GONE);
                        setMenuEvent(linearLayout);
                }
                return super.onKeyUp(keyCode, event);
        }
Ok了,现在build project就可以运行了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值