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