亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

Android開發(fā)技巧之我的菜單我做主(自定義菜單)

2020-04-11 12:32:48
字體:
供稿:網(wǎng)友

     Android SDK本身提供了一種默認(rèn)創(chuàng)建菜單的機制。但通過這種機制創(chuàng)建的菜單雖然從功能上很完備,但在界面效果上實在是有點“土”。對于一個擁有絢麗界面的程序配上一個有點“土”的菜單,會使用戶感覺很怪,甚至?xí)菇k麗的界面大打折扣。實際上,對于如此靈活和強大的Android系統(tǒng),修改菜單的樣式只是小菜一碟。為程序加入漂亮菜單的方法很多。在本節(jié)先介紹一種比較常用的方法,就是通過onKeyDown事件方法和PopupWindow實現(xiàn)自定義的菜單。至于通過這種技術(shù)能否設(shè)計出絢麗的菜單效果,那就要看我們的設(shè) 計、美學(xué)、心理學(xué)功底了。

     通過6.1.1節(jié)介紹的選項菜單可以知道。通過按手機的“Menu”鍵(是手機上的硬按鍵,不同手機“Menu”鍵所在的位置會不同),可以彈出選項菜單,再按“Back”鍵,選項菜單會關(guān)閉。那么要想模擬選項菜單的彈出和關(guān)閉效果,只需要監(jiān)聽這兩個鍵的按下事件即可。并且在“Menu”鍵按下時使用PopupWindow彈出一個窗口作為模擬的選項菜單。下面先來看看如圖6.9所示的模擬選項菜單的效果。



從圖6.9可以看出,在界面的下方顯示了3個菜單項:“首頁”、“我的”和“更多”。其中“我的”菜單項的文字和圖像是左右水平排列,而另兩個菜單項上的文字和圖像是上下垂直排列。實際上,這種效果由一個普通的布局文件(menu_layout.xml)完成的,代碼如下:

復(fù)制代碼 代碼如下:

<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"android:layout_width="fill_parent"
android:layout_height="wrap_content"android:gravity="bottom">
<!-- 第一個菜單項:“首頁” -->
<LinearLayout android:id="@+id/home"android:orientation="vertical"
android:layout_width="fill_parent"android:layout_height="wrap_content"
android:background="@drawable/button_normal_translucent"
android:layout_weight="1">
<ImageView android:layout_width="fill_parent"
android:layout_height="wrap_content"android:src="@drawable/home"
android:paddingTop="5dp" />
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"android:text="首頁"
android:gravity="center" />
</LinearLayout>
<!-- 第二個菜單項:“我的” -->
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:background="@drawable/button_normal"android:layout_weight="1"
android:gravity="center">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:src="@drawable/mine"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="我的" />
</LinearLayout>
<!-- 第三個菜單項
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:background="@drawable/button_normal"
android:layout_weight="1">
<ImageView android:layout_width="fill_parent"
android:layout_height="wrap_content"android:src="@drawable/more"
android:paddingTop="18dp" />
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="更多"
android:gravity="center"android:paddingTop="5dp"/>
</LinearLayout>
</LinearLayout>


在編寫上面代碼之前,別忘了準(zhǔn)備幾個相關(guān)的圖像,例如,本例使用了5個圖像。其中button_normal_translucent.png用于“首頁”菜單項的背景(半透明效果),button_normal.png用于“我的”和“更多”菜單項的背景。home.png、mine.png和more.png分別用于這三個菜單項的圖像。

下面來編寫監(jiān)聽“menu”和“back”鍵按下動作的代碼。按下“back”鍵要處理的任務(wù)有如下兩個。

如果選項菜單已經(jīng)彈出,關(guān)閉選項菜單。如果選項菜單未彈出,或已經(jīng)被關(guān)閉,直接關(guān)閉當(dāng)前的Activity,也就是調(diào)用finish方法。

為了區(qū)分上面兩個任務(wù),在程序中設(shè)置了一個int類型狀態(tài)變量(state),當(dāng)state為1時表示選項菜單已彈出,state為2時表示選項菜單未彈出。下面我們看一下完整的實現(xiàn)代碼。

復(fù)制代碼 代碼如下:

package mobile.android.ch06.custom.menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.PopupWindow;
import android.widget.Toast;
public class Main extends Activity
{
privatePopupWindow pop;
privateView layout;
private int state = 2; //狀態(tài)變量,1:選項菜單已彈出,2:選項菜單未彈出
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
publicboolean onKeyDown(int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_MENU: // 按下“menu”鍵的動作
// 選項菜單已彈出,不再彈出新的窗口
if (state == 1)
return false;
// 裝載選項菜單布局文件
layout =getLayoutInflater().inflate(R.layout.menu_layout, null);
// 創(chuàng)建PopupWindow對象,并在指定位置彈出用于顯示菜單的窗口
pop = new PopupWindow(layout,getWindowManager()
.getDefaultDisplay().getWidth(), getWindowManager()
.getDefaultDisplay().getHeight());
// 設(shè)置彈出窗口的位置
pop.showAtLocation(layout,Gravity.BOTTOM, 0, 0);
View home = layout.findViewById(R.id.home);
// 為“首頁”菜單項添加單擊事件
home.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
Toast.makeText(Main.this, "單擊定制菜單.", Toast.LENGTH_LONG).show();
// 單擊“首頁”菜單項后,關(guān)閉選項菜單
pop.dismiss();
// 重新設(shè)置狀態(tài)變量
state = 2;
}
});
// 彈出選項菜單后,將狀態(tài)變量設(shè)為1,表示選項菜單已彈出
state = 1;
return false;
case KeyEvent.KEYCODE_BACK: // 按下“back”鍵的動作
if (state == 1)
{
// 如果選項菜單已彈出,關(guān)閉它
pop.dismiss();
// 將狀態(tài)變量設(shè)為選項菜單已關(guān)閉
state = 2;
}
else if (state == 2)
{
// 如果選項菜單還沒有顯示,或已經(jīng)關(guān)閉,則直接關(guān)閉當(dāng)前的Activity
finish();
}
return false;
}
// 除“menu”和“back”按下事件外,仍需調(diào)用Activity類的onKeyDown方法來響應(yīng)其他鍵的按下事件
return super.onKeyDown(keyCode, event);
}
}

在編寫上面代碼時應(yīng)注意如下幾點。

對于選項菜單來說,一般單擊某個菜單項后,會執(zhí)行一些動作,并且選項菜單會自動關(guān)閉。為了模擬這一過程。為“首頁”菜單項添加了一個單擊事件。當(dāng)單擊“首頁”菜單項時,會彈出一個Toast提示信息,并且選項菜單會關(guān)閉。 當(dāng)執(zhí)行完按下“menu”或“back”鍵的動作后,onKeyDown方法應(yīng)返回一個常量(false或true都可以),不能再調(diào)用super.onKeyDown方法,否則在執(zhí)行完定制的菜單項動作后,又會執(zhí)行系統(tǒng)的默認(rèn)動作。例如,當(dāng)按下“back”鍵后,關(guān)閉彈出菜單后,連當(dāng)前的Activity也一起關(guān)了。當(dāng)然,如果是除了“menu”和“back”的其他鍵按下時還是需要調(diào)用Activity類的onKeyDown方法的(也就是super.onKeyDown方法),這樣在程序中還可以響應(yīng)其他的按鍵事件,否則程序除了“menu”和“back”鍵外,其他的鍵幾乎都不好使了。showAtLocation方法用于控件彈出窗口的位置。該方法的第1個參數(shù)是一個View對象。實際上,showAtLocation方法內(nèi)部只是需要調(diào)用View.getWindowToken方法來獲得一個IBinder對象。showAtLocation方法的第2個參數(shù)表示彈出窗口的位置。本例中設(shè)置了彈出窗口在屏幕底部顯示。最后兩個參數(shù)分別表示水平和垂直偏移量。本例都設(shè)為0,表示不發(fā)生偏移。因此,彈出窗口會在屏幕的最底部顯示,也就是顯示選項菜單的位置。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲自拍欧美精品| 久久久久资源| 国产一区二区三区免费视频| 先锋影音在线播放av| 国产日韩欧美在线看| 欧美日韩极品在线观看一区| 美女的奶胸大爽爽大片| 国产艳俗歌舞表演hd| 免费国产一区| 疯狂欧美牲乱大交777| 日韩欧美理论片| 国产精品视频久久久久久久| 欧美精品aⅴ在线视频| h视频在线网站| 国产精品欧美一区二区三区| 你懂的网址国产 欧美| 精品国产99久久久久久| 男女曰b免费视频| 亚洲天堂精品视频| 农村少妇久久久久久久| 欧美色视频在线| 国产精一区二区| 日韩欧美卡一卡二| 91精品婷婷国产综合久久性色| xxxxx69·hd| 69夜色精品国产69乱| 欧美视频网站| 蜜桃av导航| 亚洲精品一区二区久| 成人午夜国产福到在线| 瑟瑟网站在线观看| 91成人短视频在线观看| 日韩欧美另类一区二区| 国产aⅴ2021| 作爱视频免费观看视频在线播放激情网| 中文欧美日本在线资源| 欧美精品一区二区在线播放| 亚洲一二在线观看| 欧美高清性粉嫩交| 亚洲第一免费视频| 青娱乐国产视频| 成人狠狠色综合| 亚洲精品福利资源站| 性欧美xxxx大乳国产app| 一本一道久久综合狠狠老| 欧美黑人巨大xxx极品| 97人人模人人爽人人喊38tv| 国产二区三区在线| 日本二三区不卡| 艳色歌舞团一区二区三区| 牛人盗摄一区二区三区视频| 永久免费看片直接| 精品91久久| 性高潮久久久久久| 视频二区在线观看| 无码人妻aⅴ一区二区三区玉蒲团| 国产一区二区在线观看免费视频| 欧美 日韩 国产 一区| 女女互磨互喷水高潮les呻吟| 久久综合免费视频| 爱草在线视频| 香蒸焦蕉伊在线| 日韩高清一区| 天堂а√在线中文在线鲁大师| 精品视频一二三区| 中国精品18videos性欧美| 国产精品二区不卡| 琪琪第一精品导航| 小说区乱图片区| 尤物视频一区二区| 老司机午夜精品视频在线观看| 久久综合婷婷| 成人h版在线观看| 国产在线播精品第三| 日本不卡视频在线观看| 国产激情自拍| 精品在线你懂的| 日韩精品伦理第一区| 久久精品一区二区三区中文字幕| 国产清纯白嫩初高中在线观看性色| 欧洲专线二区三区| 欧美黄色免费视频| 激情五月宗合网| 欧美xxxx黑人又粗又长| 91在线精品观看| 丝袜亚洲精品中文字幕一区| 91丨porny丨国产| 久久精品国产成人精品| 国内免费久久久久久久久久久| 蜜臀91精品一区二区三区| 北条麻妃av高潮尖叫在线观看| 国产精品久久久久久久久影视| 99.玖玖.com| 特级西西人体www高清大胆| 日本五十路女优| 国产日韩欧美一区二区三区乱码| 中文字幕免费视频| 欧美色黄视频| 视频国产一区二区三区| 精品一区中文字幕| xxxx性欧美黑人| 国产在线精品日韩| 91av手机在线| 男女视频在线观看| 最新国产精品视频| 欧美成人精品一区二区| 99热在线观看精品| 天美星空大象mv在线观看视频| 国产专区一区| 色视频精品视频在线观看| 粉嫩一区二区三区性色av| 亚洲福中文字幕伊人影院| av日韩中文| 国产精品久久久免费观看| 国产精品97在线| 亚洲图片在线综合| 久久99久久99小草精品免视看| 亚洲精品久久久久久久久久久久| 黄色小说在线播放| 高清毛片在线看| 第一av在线| 国产精品美女久久久久av福利| 波多野结衣在线观看一区二区三区| 亚洲人一二三区| 欧美日韩xx| 91社影院在线观看| 综合网五月天| 国产精品一区二区三区在线播放| 日韩欧美的一区| 人妻体内射精一区二区| 欧美边添边摸边做边爱免费| 日本老熟俱乐部h0930| 欧美色图在线观看| 男人天堂资源网| 欧美另类交视频| 久久艹免费视频| 在线中文字幕一区| 日韩在线观看视频一区| 蜜桃色永久入口| 日韩一区精品视频| 91精品国产福利| 九色91偷拍| 国产99久久久国产精品潘金网站| 日韩精品中文在线观看| 97视频在线免费播放| 亚洲啪啪综合av一区二区三区| 国产精品久久久久久久免费看| 欧美日韩一区二区三区四区五区六区| www视频完整版| 欧美黄免费看| 九色综合国产一区二区三区| 亚洲综合天堂网| 一本久久综合亚洲鲁鲁| 91九色极品视频| 91精品国产综合久久小美女| 麻豆av一区二区三区久久| 黄色美女视频在线观看| 丰满少妇高潮一区二区| 欧美午夜视频在线观看| 国产精品久久久久一区二区国产| 国产伦精品一区二区三区四区免费| 色视频www在线播放国产成人| 久久精品亚洲国产奇米99| 亚洲高清网站| 丝袜人妻一区二区三区| 九色网友自拍视频手机在线| 欧美成人午夜影院| 免费日本一区二区三区视频| 宅男深夜免费观看视频| 国产偷窥女洗浴在线观看亚洲| 国产精品一二三在| 精品视频一二三| a天堂中文字幕| 人妻精油按摩bd高清中文字幕| a在线视频v视频| 99久久国产精| 中文字幕无线精品亚洲乱码一区| 国产精品久久久久桃色tv| 欧美日本一区二区三区四区| 青檬在线电视剧在线观看| 日韩精品一区二区三区中文字幕| 日本小视频在线免费观看| 男人的天堂成人| 中文字幕av手机在线| 艳色歌舞团一区二区三区| 国产精品传媒入口麻豆| 亚洲观看黄色网| 亚洲久久成人| 亚洲成人午夜影院| 免费在线观看国产黄| 亚洲在线视频一区| 中文字幕免费国产精品| 亚洲三级免费电影| 亚洲电影天堂av| 色999五月色| 在线观看国产高清视频| 欧美成人精品高清在线播放| 亚洲天堂一区在线| 欧美亚洲激情| 外国成人在线视频| 久久一区二区电影| 久久精品国产亚洲av高清色欲| 精品国产青草久久久久福利| 欧美极品少妇xxxxx| 青草影院在线观看| 99国产精品久久一区二区三区| 国产精品嫩草av| 亚洲国产无线乱码在线观看| 欧美久久久久久久久| 国产91免费在线观看| 我不卡伦不卡影院| 久久91亚洲精品中文字幕奶水| 91精品国产综合久久小美女| 午夜精品久久久久久久第一页按摩| 中文乱码人妻一区二区三区视频| 深夜福利小视频| 91色视频在线| 在线观看成人影院| 五月天福利视频| 69堂国产成人免费视频| 国产无一区二区| 亚洲人成人一区二区三区| 性久久久久久久久久久| 日本一区二区三区久久| 成人a在线观看高清电影| 免费网站你懂的| 午夜剧场成人观在线视频免费观看| 99re成人在线| 国产精品v一区二区三区| 婷婷久久综合| 一线天自拍视频| 日韩亚洲欧美中文高清在线| 色呦呦一区二区三区| 欧美变态xxxx| 91久色porny| 久热精品视频在线免费观看| 夜夜爽夜夜爽精品视频| 不卡的一区二区| 一区二区三区国产好的精华液| 五月天激情图片| 蜜臀一区二区三区精品免费视频| jvid一区二区三区| 高潮按摩久久久久久av免费| 2019中文字幕全在线观看| 国产精品一品二区三区的使用体验| 国产精品福利电影一区二区三区四区| 在线不卡a资源高清| 成人免费观看a| 欧美女人交a| 激情综合网av| 先锋影音欧美四级| 成全视频在线播放大地| 亚洲一区精品在线| 大色综合视频网站在线播放| 美女视频一区二区三区在线| 成年人在线看片| 992tv在线影院| 91超碰caoporn97人人| 久久成人小视频| 日韩av第一页| www.久久撸.com| 99久久精品情趣| 国产精品黄页网站在线播放免费| 欧美一级淫片免费视频黄| 日韩视频免费观看| 黄色精品视频在线观看| 18禁一区二区三区| 欧美激情三级| 亚洲成人偷拍自拍| 青青草国产成人久久91网| 一区二区三区四区日韩| 色喇叭免费久久综合网| 成人免费观看毛片| 亚洲激情在线| 91tv精品福利国产在线观看| 综合久久中文字幕| 国产三级久久久| 国产成人亚洲综合a∨婷婷| 青柠在线影院观看日本| 一二三四区在线| 国产女人高潮毛片| 色系列之999| 日韩理论片中文av| 日日摸夜夜爽人人添av| 国产欧美精品一区aⅴ影院| 国产a√精品区二区三区四区| 成人黄色av网站| www.激情网.com| 亚洲私拍自拍| 妞干网免费视频| 国产一区二区伦理片| 日韩精品一区二区三区中文精品| 国产精品久久久久久久精| 国产91在线视频| 中日韩视频在线观看| 在线免费观看www| 国产精品99一区二区三| 中文字幕不卡三区视频| 久久国产精品久久久久| 亚洲第一搞黄网站| 99pao成人国产永久免费视频| 久久久99精品免费观看| 欧美在线3区| 国产+人+亚洲| 欧美日韩国产麻豆| 国产精品av免费在线观看| 黄色成人av网站| 欧美特级特黄aaaaaa在线看| 91精产国品一二三| 中文字幕一区二区三区5566| 黄色av网址在线观看| 日本精品久久久| 日韩精品在线看片z| 久久精品aaaaaa毛片| 中文字幕2022永久在线| 亚洲国产精品久久久久秋霞不卡| 欧美视频第一| 欧美一区二区三区电影| 在线观看日本一区| 色综合视频二区偷拍在线| 色香蕉在线视频| 精品国产一区二区三区久久久蜜月| 欧美成人国产精品高潮| 国产精品7m凸凹视频分类| 亚洲无毛电影| 亚洲va欧美va天堂v国产综合| 国产天堂第一区| 高清毛片aaaaaaaa**|