Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android中文API(97)—— ContextMenu

Android中文API(97)—— ContextMenu

編輯:Android開發實例

前言

  本章內容是android.view.ContextMenu,版本為Android 2.3 r1,翻譯來自"Kun",再次感謝"Kun" !
 

 

 

正文

  一、結構

 

public interface ContextMenu implements Menu

 

android.view.ContextMenu

 

 

  二、概述

 

      擴展自Menu的上下文菜單提供了修改上下文菜單頭(header)的功能。(譯者注:當一個視圖注冊了上下文菜單時,執行一個在該對象上長按(2秒)的動作,將出現一個具有相關功能的浮動菜單。)

      上下文菜單不支持菜單項的快捷方式和圖標。

      當執行長按上下文菜單時,大多數情況會調用registerForContextMenu(View) 函數和重寫執行onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo)函數。(譯者注:因為要創建一個上下文菜單,你必須重寫這個活動的上下文回調函數onCreateContextMenu() 並且 通過registerForContextMenu(View) 為其注冊上下文菜單。)

 

 

  三、內部類

 

         interface  ContextMenu.ContextMenuInfo

  獲得更多關於創建上下文菜單的信息。( 譯者注:例如:AdapterViews 使用這個類可以精確選擇adapter的位置來啟動上下文菜單。)

 

 

  四、公共方法

 

    public abstract void clearHeader ()

  清除上下文菜單頭的信息。(譯者注:包括圖片和文字信息

     

 

  Menu.clearHeader(); 後

  )

 

  public abstract ContextMenu setHeaderIcon (Drawable icon)

  為上下文菜單頭設置圖標

  參數

  icon          你要使用的Drawable

             返回值

  調用你設置修改的上下文菜單

 

  public abstract ContextMenu setHeaderIcon (int iconRes)

  設置上下文菜單頭圖標為指定的資源id

  參數

  iconRes  你要使用的圖標資源的目錄

(譯者注:把圖標放入res/drawable/ 目錄下,R文件會自動生成對應項。設置方法如menu.setHeaderIcon(R.drawable.webtext)

  這個上下文菜單頭是沒有設置圖標的

                 

  這個上下文菜單頭是設置了圖標的 

       

 )

  返回值

  調用你設置修改過的上下文菜單

 

  public abstract ContextMenu setHeaderTitle (int titleRes)

  通過資源標識符為上下文菜單頭的標題欄設置文字。(譯者注:需要在res/string中先設置一段你需要的文字,如:<string name="titletest">這是一段測試文字</string>

然後通過R文件索引到這段文字,menu.setHeaderTitle(R.string.titletest))

參數    

titleRes  所需文字資源的索引

                   返回值

調用你設置修改過的上下文菜單

 

  public abstract ContextMenu setHeaderTitle (CharSequence title)

  設置上下文菜單的標題,顯示在標題欄

  參數

  title          標題要顯示的文字

                 返回值

  調用你設置修改過的上下文菜單

 

  public abstract ContextMenu setHeaderView (View view)

  設置View 到上下文菜單頭上。將替代上下文菜單頭的圖標和標題(或者替代你之前設置的headerView)

  參數

  view         上下文菜單頭要使用的 View

                 返回值

  調用你設置修改過的上下文菜單內容

 

 

  五、補充
 

 

  代碼示例:

      Test_Contextmenu.java

public class Test_Contextmenu extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView txt1 = (TextView) this.findViewById(R.id.txt1);
        this.registerForContextMenu(txt1);
        TextView txt2 = (TextView) this.findViewById(R.id.txt2);
        this.registerForContextMenu(txt2);
    }  
    // 重寫 onCreateContextMenu 用以創建上下文菜單
     @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo){
        super.onCreateContextMenu(menu, v, menuInfo);
        // 創建 R.id.txt1  的上下文菜單
        if (v == (TextView) this.findViewById(R.id.txt1)) {
            menu.setHeaderIcon(R.drawable.icon);
            menu.setHeaderTitle(R.string.titletest);
            //menu.clearHeader();
            // 第一個參數:組ID
            // 第二個參數:菜單項ID
            // 第三個參數:順序號
            // 第四個參數:菜單項上顯示的內容
            menu.add(1,0,0,"菜單1");
            menu.add(1,1,1,"菜單2").setCheckable(true); // 增加一個√選項
            
        }
        // 創建 R.id.txt2 的上下文菜單(多級)
        else if(v == (TextView) this.findViewById(R.id.txt2)){
            
        // ContextMenu.addSubMenu("菜單名稱") - 用來添加子菜單。子菜單其實就是一個特殊的菜單
            SubMenu sub1 = menu.addSubMenu("父菜單1");
            sub1.setHeaderIcon(R.drawable.folder);
            sub1.add(0, 0, 0, "菜單1");
            sub1.add(0, 1, 1, "菜單2");
            sub1.setGroupCheckable(1, true, true);
            SubMenu sub2 = menu.addSubMenu("父菜單2");
            sub2.setIcon(R.drawable.text);
            sub2.add(1, 0, 0, "菜單3");
            sub2.add(1, 1, 1, "菜單4");
            sub2.setGroupCheckable(1, true, true);
        }
    }
}

    main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:id="@+id/txt1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="請 長 按 觸 發(txt1)"
    />
    <TextView 
    android:id="@+id/txt2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="請 長 按 觸 發(txt2)"
    />
    
</LinearLayout>

    strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, Test_Contextmenu!</string>
    <string name="app_name">Test_Contextmenu</string>
    <string name="titletest">這是一段測試文字</string>
</resources>

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved