您的位置:首页 > 移动开发 > Android开发

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

2012-02-29 21:35 429 查看


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

[复制链接]

zguanyu





No.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就可以运行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐