2014-10-01 127 views
3

我創建了一個名爲drmenu.xml的新菜單。它正常工作時,我按菜單按鈕,但我需要打開一個上下文菜單時,用戶按下按鈕。 下面的代碼按鈕只是顯示敬酒。在Android中打開一個浮動菜單(上下文菜單)?

這是我的XML佈局:

<LinearLayout 
     android:id="@+id/MenuCall" 
     android:layout_width="90dip" 
     android:layout_height="match_parent" 
     android:gravity="right|center_vertical" > 
     <ImageView 
      android:id="@+id/MenuCall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/imageiew6" /> 
    </LinearLayout> 

,這是我的Java代碼:

final LinearLayout callback_var = (LinearLayout) findViewById(R.id.MenuCall); 
    registerForContextMenu(callback_var); 
    callback_var.setOnClickListener(new android.view.View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "this is repeated",  Toast.LENGTH_LONG).show(); 
      openContextMenu(callback_var); 
     } 
+1

你到底在做什麼? MenuCall是一個ImageView,並將它轉換爲LinearLayout? – 2014-10-01 17:16:17

回答

5

如果你想創建一個上下文菜單,你必須調用該方法registerForContextMenu()傳遞查看應該與上下文菜單相關聯。

例如,假設上下文菜單與按鈕關聯:

Button button = (Button) findViewById(R.id.my_button); 
registerForContextMenu(button); 

您也可以在活動的OnCreate()被調用。然後,在同一活動中,您需要覆蓋onCreateContextMenu()方法。

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.your_context_menu, menu); 
} 

然後,你必須實現onContextItemSelected(),用於觸發正確的操作時按下右鍵菜單裏面的項目:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.first_action: 
      // your first action code 
      return true; 
     case R.id.second_action: 
      // your second action code 
      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 

現在的按鈕,長按即可打開你所定義的上下文菜單在your_context_menu.xml文件中。

考慮與長按打開上下文菜單符合Android的標準UI,但是如果你希望你的右鍵菜單出現在一個簡單的點擊,你可以看看here the answer

注: 至於說here

的ID不一定是整個樹唯一的,但它應該是 您正在搜索的樹的一部分(可能經常 是整個樹中是唯一的,所以它當 可能時,最好是完全獨一無二的)。

0

正如Joseph82所說,對於上下文菜單我們可以使用這種方式。和我找到使用選項菜單我們可以使用打擊代碼: 在Oncreate方法寫這個:

final LinearLayout callback_var = (LinearLayout) findViewById(R.id.MenuCall); 
    callback_var.setOnClickListener(new android.view.View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      openOptionsMenu(); 
     } 
    }); 


@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    MenuInflater mnu = getMenuInflater(); 
    mnu.inflate(R.menu.darunamamenu, menu); 
    return true; 
} 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     switch (item.getItemId()) 
     { 
     case R.id.firstpage: 

      break; 
     case R.id.exit: 
      finish(); 
      System.exit(0); 
      break; 
     case R.id.setting: 
      Intent Settingact = new Intent(G.currentActivity, SettingActivity.class); 
      G.currentActivity.startActivity(Settingact); 
      G.currentActivity.finish(); 
      break; 
     case R.id.regalarm: 
      Intent RegAlarm = new Intent(G.currentActivity, alarmsetter.class); 
      G.currentActivity.startActivity(RegAlarm); 
      G.currentActivity.finish(); 
      break; 
     case R.id.inform: 
      Intent inform = new Intent(G.currentActivity, ActivityInformation.class); 
      G.currentActivity.startActivity(inform); 
      G.currentActivity.finish(); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
}