6

Мое приложение для Android поддерживает 2,2 и выше. Я использую библиотеку поддержки appcompat для панели действий, поэтому она должна показывать только, есть ли вещи, которые не подходят. Я хочу, чтобы моя панель действий поддерживала кнопку переполнения (три вертикальных квадрата), которая показывает меню с другими элементами при нажатии.Android-панель действий поддержки, не показывающая меню переполнения

В моем файле меню у меня есть три элемента. Однако в приложении я вижу только два из них, а кнопка переполнения не отображается.

activity_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/action_settings" 
     android:icon="@drawable/checkbox" 
     android:title="@string/action_settings" 
     sord.ids_connect:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_settings2" 
     android:icon="@drawable/checkbox_checked" 
     android:title="@string/action_settings" 
     sord.ids_connect:showAsAction="ifRoom" /> 

    <item 
     android:id="@+id/action_settings3" 
     android:icon="@drawable/ic_launcher" 
     android:title="@string/action_settings" 
     sord.ids_connect:showAsAction="ifRoom" /> 

</menu> 

Java файл

import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarActivity; 

public class Activity_Menu extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_menu, menu); 
     //return true; 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       super.onBackPressed(); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

манифеста

<activity 
     android:theme="@style/Theme.AppCompat.Light.DarkActionBar" 
     android:name="sord.ids_connect.Activity_Menu" 
     android:screenOrientation="portrait" 
     android:label="@string/title_activity_menu" > 
    </activity> 
+1

Вы нажмете кнопку MENU на устройстве или эмуляторе? На эмуляторе кнопка MENU отображается на PgUp. – CommonsWare

+0

Im тестирование на моем телефоне, и когда я нажимаю кнопку меню, я вижу, что меню отображается внизу, только с 1 опцией, которая говорит «Настройки», также почему только один параметр появляется там, когда у меня есть 3 элемента в файле меню ? – omega

ответ

1

Im тестирование на моем телефоне, и при нажатии на кнопку меню, я вижу в нижней части отображается только 1 вариант, который говорит «Настройки»

Это переполнение.

также почему только 1 параметр появляется там, когда у меня есть 3 элемента в файле меню?

Потому что два других находятся в панели действий. Вы указали ifRoom, и там было место для двоих, а не три.

+0

О, я вижу, но как я могу сделать три кнопки точки сверху? – omega

+0

@omega: он появится наверху на устройствах, которым не хватает кнопки MENU, и на любых устройствах под управлением Android 4.4 и выше. См. Мою статью в блоге: http://commonsware.com/blog/2013/12/09/menu-key-dead-again.html – CommonsWare

+0

Как открыть меню переполнения с помощью java-кода? – omega

0

Вам нужно меню макет меню, как показано ниже

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/action_container" 
    android:title="Menu" 
    android:showAsAction="never">   
<item 
    android:id="@+id/action_settings" 
    android:icon="@drawable/checkbox" 
    android:title="@string/action_settings" 
    sord.ids_connect:showAsAction="ifRoom" /> 

<item 
    android:id="@+id/action_settings2" 
    android:icon="@drawable/checkbox_checked" 
    android:title="@string/action_settings" 
    sord.ids_connect:showAsAction="ifRoom" /> 

<item 
    android:id="@+id/action_settings3" 
    android:icon="@drawable/ic_launcher" 
    android:title="@string/action_settings" 
    sord.ids_connect:showAsAction="ifRoom" /> 
</item> 

</menu> 
7

Если вы используете библиотеку поддержки вам необходимо объявить showAsAction из вашего собственного пространства имен; который будет выглядеть следующим образом: app:showAsAction. Вы можете обратиться за ответом eOnOe.

Использование android:showAsAction не будет работать с библиотекой поддержки, поскольку оно использует собственную реализацию панели действий, а не ее реализацию.

Вы также всегда можете сгруппировать элементы в иконе, например:

<item ... 
     android:icon="@drawable/abs__ic_menu_moreoverflow_holo_dark"> 
    <menu>  
    <item .../> 
    <item .../> 
    </menu> 
</item> 
0
 Change Your menu.xml with the following code. 




    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:sord.ids_connect="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_container" 
     android:title="Menu" 
     android:showAsAction="always">   
    <item 
     android:id="@+id/action_settings" 
     android:icon="@drawable/checkbox" 
     android:title="@string/action_settings" 
     android:showAsAction="always"/> 

    <item 
     android:id="@+id/action_settings2" 
     android:icon="@drawable/checkbox_checked" 
     android:title="@string/action_settings" 
     android:showAsAction="always" /> 

    <item 
     android:id="@+id/action_settings3" 
     android:icon="@drawable/ic_launcher" 
     android:title="@string/action_settings" 
     android:showAsAction="always" /> 
    </item> 

    </menu> 
14

Общая эталонным

1 - Override onCreateOption и надуть меню

Примечание

не имеет значения, если вы возвращаетесь правда или звоните супер

@Override 

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_menu, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

2 - Добавление имен в файл menu.xml.

xmlns:**yourapp**="http://schemas.android.com/apk/res-auto" 

3 - установить showAsAction в всегда или ifRoom

**yourapp**:showAsAction="ifRoom" 

4 - если вы используете AppCompat убедитесь, что активность распространяется ActionBarActivity, вы не должны измените любое значение ActionBar, чтобы увидеть, как вы используете menuOption в панели.

Наконец, вы будете иметь что-то вроде [помнить пользователю правильное пространство имен для YourApp]

main.xml

<item 
    android:id="@+id/action_settings" 
    android:icon="@drawable/ic_action_settings" 
    android:title="@string/action_settings" 
    yourapp:showAsAction="ifRoom" /> 

на ваш Мероприятие

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return super.onCreateOptionsMenu(menu); 
} 
+0

yourapp: showAsAction = "ifRoom" Этот хак заставил его работать - отображать пункты меню, даже если доступны физические кнопки. – Master

+0

Как это сделать в java без xml? –

+0

Хорошо, я нашел его в SupportMenuItem.setShowAsAction() –

2

Меню отображения переполнения Android отображается только в том случае, если на вашем устройстве нет кнопки меню. Конечно, вы можете создать взломать его по умолчанию для всех устройств, но это не рекомендуется. И для каждого элемента добавьте android:showAsAction="never", и это говорит о том, что ваше меню показывает меню переполнения, если у вас нет кнопки меню.

-2

У меня была та же проблема. Я решил ее:

1) комментариев return true;

2) раскомментировав return super.onKeyUp(keyCode, event);

в общественном boolean onKeyUp(int keyCode, KeyEvent event)

Смежные вопросы