Элементы добавляются в меню переполнения вместо панели действий.

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

Это файл menu_main-

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context = ".MainActivity"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="never"
    />

<item
    android:id="@+id/action_create_order"
    android:title="@string/action_create_order"
    android:icon = "@drawable/create_order"
    android:orderInCategory="1"
    app:showAsAction="ifRoom"
    />

This is the MainActivity code-

package com.newboston.bitsandpizzas;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;

public class MainActivity extends Activity {

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case R.id.action_create_order:
            Intent intent = new Intent(this,OrderActivity.class);
            startActivity(intent);
            return true;
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main,menu);
    return super.onCreateOptionsMenu(menu);
}

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

Скриншот приложения Я попытался установить showAsAction для обоих на "всегда", но проблема все еще не устранена.

(Эмулятор bluestacks)


person Ryuzaki    schedule 23.06.2016    source источник
comment
У вас есть место в панели действий для пункта меню? Если у вас нет места, даже установка всегда не исправит это.   -  person user3331142    schedule 23.06.2016
comment
@user3331142 user3331142 Да, есть ... на панели действий есть только имя приложения со значком приложения. Я загрузил скриншот, чтобы вы могли посмотреть.   -  person Ryuzaki    schedule 23.06.2016
comment
Это странно. Я взял ваш код и использовал его в рабочем приложении, которое я использую, и отобразился значок.   -  person user3331142    schedule 23.06.2016
comment
Возможно ли, что это как-то связано с эмулятором? Я использую блюстакс.   -  person Ryuzaki    schedule 23.06.2016
comment
Я бы проверил это, используя другой эмулятор. Genymotion предоставляет бесплатную эмуляцию для личного использования. Или эмуляторы Android Studio сейчас довольно приличные. Конечно, если вы сможете заполучить реальное Android-устройство, это будет очень полезно.   -  person user3331142    schedule 23.06.2016


Ответы (1)


В зависимости от размера экрана и заголовка панели действий вам может не хватить места для отображения даже двух пунктов меню. Даже если вы установите для него значение «ifRoom» для обоих, что рекомендуется вместо «всегда», если нет места, пункты меню будут отображаться в пункте меню переполнения.

Вы можете проверить это, либо проверив, как ваш макет выглядит на экране большего размера с большим количеством доступного места для пунктов меню, укоротив заголовок панели действий, чтобы освободить больше места, либо просмотрев макет пункта меню в горизонтальной ориентации, чтобы увидеть, сохраняется ли проблема. .

Если проблема не в этом, опубликуйте снимок экрана с изображением панели действий, когда вы установите для обоих элементов значение «ifRoom», а также опубликуйте код того, как вы создаете и расширяете меню параметров.

Имейте в виду, что расположение элементов меню будет выглядеть по-разному в зависимости от устройства. Потому что устройства с большим размером экрана могут отображать больше пунктов меню на главной панели действий. Надеюсь это поможет.

person Charles Li    schedule 23.06.2016
comment
Спасибо за ваш ответ. Я разместил скриншот и код инфляции. Вы можете проверить это. - person Ryuzaki; 23.06.2016
comment
Вы тестировали его на своем телефоне или на эмуляторе Android Studio? И поскольку ваш класс расширяет Activity, попробуйте использовать android:showAsAction вместо app:showAsAction. - person Charles Li; 23.06.2016
comment
Ой! Это сработало! Я еще немного почитал и узнал, что при использовании Activity предполагается, что это приложение: а не android: но приложение по-прежнему выдает эту ошибку (даже если оно работает отлично) - следует использовать app:showAsAction с библиотекой appcompat с xmlns :app=schemas.android.com/apk/res-auto меньше... (Ctrl+F1) При использовании библиотеки appcompat ресурсы меню должны ссылаться на showAsAction в пространстве имен app:, а не в пространстве имен android:. Точно так же, если вы не используете библиотеку appcompat, вы должны использовать атрибут android:showAsAction. - person Ryuzaki; 24.06.2016
comment
Рад, что это сработало! Будет здорово, если вы примете ответ, если он вам помог. - person Charles Li; 24.06.2016
comment
О да, мой плохой. Я новый :) - person Ryuzaki; 24.06.2016