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(R.id.main);
View contentView = getLayoutInflater().inflate(R.layout.optionsmenu, null);
contentView.findViewById(R.id.TextView02).setOnClickListener(this);
contentView.findViewById(R.id.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"
這些,就是這一天所學習的內容了。