Android高级部分第二天。
在这一天里,我主要学习了如何定制菜单,因为Android系统本身自带的菜单太丑了,而且功能也不好使,再加上为了软件的整体风格、色调一致,我们就需要用到自己定制的菜单了。但是,同时Android系统本身自带的菜单,我们又没有办法去修改他,因为这些是系统的源码,我们没办法想前面的Toast和notification一样,通过修改代码来进行定制,所以,我们需要有别的方法。
另一种思路就是,我们可以将Android本身自带的菜单屏蔽掉,同时,我们自己创建一个菜单,并悬浮于Activity之上,并在我们按菜单键的时候,这个自己创建的菜单能够显示出来。
根据上面的思路,再根据查找的资料。发现,我们可以使用PopupWindow来实现我们需要的功能,因为,PopopWindow可以悬浮在任意的Activity上面,满足我们的需要。同时,在满足这个要求的同时,我们也要实现系统自带的打开菜单的功能。同时,关闭菜单时,有五种情况如下:
1) 再按menu键
2) 按back键
// 监听back键,如果用户点击了back
// 判断如果菜单显示,则关闭菜单,同时,不关闭activity
3) 处于暂停状态
4) 点击某个菜单项
5) 点击菜单和通知栏以外的区域(不会响应点击事件)
当我们做了以上的事件事,菜单栏都会关闭,所以,我们就需要去实现这些功能。代码如下:
private void initOptionsMenu()//初始化菜单
{
mainLayout = findViewById(.main);
View contentView = getLayoutInflater().inflate(R.layout.optionsmenu, null);
contentView.findViewById(.TextView02).setOnClickListener(this);
contentView.findViewById(.view1).setOnClickListener(this);
// 初始化PopupWindow
mOptionsMenu = new PopupWindow(contentView ,
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
mOptionsMenu.setAnimationStyle(R.style.AnimationPreview);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)//实现menu键的点击事件
{
switch (keyCode)
{
case KeyEvent.KEYCODE_BACK:
if (mOptionsMenu.isShowing())
{
mOptionsMenu.dismiss();
return false;
}
break;
case KeyEvent.KEYCODE_MENU:
if (mOptionsMenu.isShowing())
{
mOptionsMenu.dismiss();
}
else
{
mOptionsMenu.showAtLocation(mainLayout, Gravity.BOTTOM, 0, 0);
}
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onPause()//再系统进入到onPause状态时,关闭菜单。
{
super.onPause();
if (mOptionsMenu.isShowing())
{
mOptionsMenu.dismiss();
}
}在这上面都是实现定制菜单栏的代码。
同时,这一天,我们也学习了,如何在2.3的操作系统上,实现4.0以上的Holo风格。需要我们对SDK中的内容进行操作。具体步骤如下:
思路:控件外观取决于:style
style定义的文件路径:
adt-bundle-windows-x86-20130917\sdk\platforms\android-18\
data\res\values\styles.xml
1. 例如:RadioButton的style是:
<item name="android:button">?android:attr/listChoiceIndicatorSingle</item>用listChoiceIndicatorSingle为关键字,在themes.xml文件中搜索
结果是:<item name="listChoiceIndicatorSingle">@android:drawable/btn_radio</item>
2. 在res中查找btn_radio相关的资源,selector和若干图片
3. 拷贝btn_radio_holo_light.xml到项目中
4. 再根据编译错误查找需要的图片
修改RadioButton的android:button属性值为:
android:button="@drawable/btn_radio_holo_light"
这些,就是这一天所学习的内容了。
转载于:https://blog.51cto.com/pbaiyy/1309921
















