編輯:關於Android編程
本文實例講述了Android編程之菜單實現方法。分享給大家供大家參考,具體如下:
菜單是許多應用程序不可或缺的一部分,Android中更是如此,所有搭載Android系統的手機都要有一個“menu”鍵,即菜單鍵,由此可見菜單在Android程序中的重要與特殊,其中Android的SDK提供了三種類型:分別為options menu(常規菜單),context menu(上下文菜單)和submenu(子菜單)。其中options menu是通過按Menu鍵來顯示,context menu通過在view(視圖控件上)按2秒之後才會顯示,這兩種菜單都可以嵌套子菜單,但是子菜單裡不能嵌套子菜單。
Options menu只能在屏幕最下面顯示六個菜單選項,這六個菜單叫做icon menu(圖標菜單),圖標菜單不能有checkable選項,多於6項的會以more icon menu菜單來調出,叫做expanded menu(擴展菜單).options menu(選項菜單)通過activity 的onCreateOptionsMenu來生成,這個函數只會在Menu第一次生成時調用,任何想要改變options menu的只能通過onPrepareOptionsMenu來實現,這個函數會在menu顯示之前被調用。onOptionsItemSeleted用來處理選中的options menu菜單項
Context Menu是跟某個具體的view捆綁在一起的,在activity中用registerForContextMenu來為某個view注冊上下文菜單。Context menu在顯示之前會調用onCreateContextMenu來生成menu,onContextItemSeleted用來處理選中的context menu 菜單。
Submenu是子菜單,可以嵌套在以上兩種菜單中,但是子菜單不能嵌套子菜單
Android還提供了對菜單項進行分組的功能,可以把相似功能的菜單分在一組裡面,這樣就可以通過調用setGroupCheckable,setGroupEndable,setGroupVisible來設置屬性菜單,而不用單獨設置了。
1、下面是一個創建options menu 的例子:
首先在res裡創建一個menu文件夾,裡面可以創建許多menu的資源文件,方便管理。在這個文件夾裡創建一個Android的xml文件,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/newFile"
android:icon="@drawable/ic_launcher"
android:title="@string/newFile_title"/>
<item
android:id="@+id/ecit"
android:icon="@drawable/ic_launcher"
android:title="@string/exit_title"/>
</menu>
這裡創建了兩個菜單選項,每個item是一個菜單選項,其中的icon也可以不寫;title裡面的內容要在string文件裡提前寫上,這是菜單的標題;最後在Activity裡面通過onCreateOptionsMenu方法創建這個菜單,然後通過onOptionsItemSelect方法來處理這個菜單。代碼如下:
package cn.csdn.android.menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Toast;
public class MenuTest1Activity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}
}
運行結果如下圖所示:

在屏幕的下方可以看到這兩個菜單。
2、在Activity中添加方法可以響應菜單的一些事件,通過上面的例子,在它的Activity中添加onOptionsItemSelected方法,可以是菜單完成它的功能,onOptionsItemSelected的代碼如下:
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.newFile:
Toast.makeText(this,"new file",Toast.LENGTH_LONG).show();
break;
case R.id.ecit:
//Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
this.finish();
break;
}
添加此方法後點擊“退出”按鈕可以退出,點擊“新建文件”出現名為“new file”的對話框。
也可以用onMenuItemClick方法處理:代碼如下
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.newFile:
Toast.makeText(this, "new file", Toast.LENGTH_LONG).show();
break;
case R.id.ecit:
// Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
this.finish();
break;
}
return false;
功能和上一個方法一樣
3、創建子菜單,在xml文件中插入菜單,下面的例子是在第二個菜單裡插入兩個菜單:xml文件源碼如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menuitem1"
android:title="menuitem1"/>
<item
android:id="@+id/menuitem2"
android:title="menuitem2">
<menu >
<item
android:id="@+id/menuitem3"
android:title="menuitem3"/>
<item
android:id="@+id/menuitem4"
android:title="menuitem4">
</item>
</menu>
</item>
</menu>
4、帶單選或復選的子菜單,在創建菜單時添加setGroupCheckable方法,來確定添加的是單選還是復選:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.second_menu, menu);
SubMenu sm = menu.findItem(R.id.item3).getSubMenu();
sm.setIcon(R.drawable.ic_launcher);
// sm.setGroupCheckable(0, true, true);
sm.getItem(0).setCheckable(true);
sm.getItem(0).setChecked(true);
this.menu = menu;
return super.onCreateOptionsMenu(menu);
}
希望本文所述對大家Android程序設計有所幫助。
android索引
項目需要,今天學習了一下索引涉及到的技術:繪制右側的索引條點擊某個字母,定位到ListView控件的指定位置 布局文件: 自
Android編程顯示網絡上的圖片實例詳解
本文實例講述了Android編程顯示網絡上的圖片的方法。分享給大家供大家參考,具體如下:在Android中顯示網絡上的圖片,需要先根據url找到圖片地址,然後把該圖片轉化
.Net程序員玩轉Android開發---(17)Handler用法
在android開發中,如果在一個線程中想更新主界面中控件顯示的數據,直接給主界面控件賦值就會出現異常,android中為了安全起見,是不允許在線程中更新界面控件的數據,
淺談Android消息異步處理機制
Android 確實是不允許在子線程中進行UI 操作。但有些時候,我們必須在子線程裡去執行一些耗時任務,然後根據任務的執行結果來更新相應的UI 控件,這該如何是好呢?對於