2014-10-01 6 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? –

ответ

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 стандартного интерфейса, однако если вы хотите, чтобы контекстное меню появляться на простым нажатием вы можете посмотреть here the answer

Примечание: Как сказал here

Идентификатор не должен быть уникальным по всему дереву, но она должна быть уникальным в пределах части дерева вы ищете (которые часто могут быть все дерево, так что Лучше быть полностью уникальным, если возможно ).

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); 
} 
Смежные вопросы