Подтвердить что ты не робот

Элементы в ActionBarCompat всегда отображаются в режиме переполнения

Я использую ActionBarCompat в своем приложении, я хочу показать один или два элемента в панели действий

Я рассказал руководству разработчиков Google, но когда я его тестирую, элементы отображаются в опции "Переполнение" (в Nexus 4), и если я нажимаю кнопку меню, если существуют (например, Galaxy S3)

Что я делаю неправильно?

РЕШЕНИЕ НАЙДЕНО

Вы можете найти его в ответе.

4b9b3361

Ответ 1

Я нашел решение, поэтому я отправил в качестве ответа:

РЕШЕНИЕ НАЙДЕНО

В xml меню вы должны поместить новое пространство имен, чтобы сделать работу actionbarcompat. Таким образом, есть несколько вариантов, которые нуждаются в этом пробеле вместо "android". Итак, решения следующие:

Меню старого входа:

    <item
        android:id="@+id/action_register"
        android:showAsAction="always"
        android:title="@string/login_menu_register"/>

Новое меню входа в систему (решение) (Посмотрите, как выбрано "showAsAction" )

    <item
        android:id="@+id/action_register"
        shudy:showAsAction="always"
        android:title="@string/login_menu_register"/>

Login.xml(MENU)

<item
    android:id="@+id/action_register"
    android:showAsAction="always"
    android:title="@string/login_menu_register"/>
<item
    android:id="@+id/action_register2"
    android:showAsAction="always"
    android:title="miau"/>

LoginActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SLog.d(CLASS_NAME + " onCreate()");
        setContentView(R.layout.activity_login);
        actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
        findViews();
        buttons();

    }

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

манифеста

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
        <activity
            android:name="com.shudy.myworld.LoginActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

enter image description hereenter image description here

Ответ 2

У меня была та же проблема, и я нашел два решения:

В меню xml (Login.xml) используйте имя вашего приложения для тега showAsAction:

вместо:

<item
    android:id="@+id/action_register"
    android:showAsAction="always"
    android:icon="@drawable/some_icon"
    android:title="@string/login_menu_register" />

использование:

<item
    android:id="@+id/action_register"
    yourappname:showAsAction="always"
    android:icon="@drawable/some_icon"
    android:title="@string/login_menu_register" />

Я предполагаю, что ваше имя приложения теневое.

второе решение для меня, в классе активности, в onCreateOptionsMenu()

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem registerMenuItem = menu.findItem(R.id.action_register);
    registerMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // change this in backcompat
    return true;
}

если вы используете backCompatibility, измените последнюю строку:

MenuItemCompat.setShowAsAction(registerMenuItem,MenuItemCompat.SHOW_AS_ACTION_ALWAYS);

Ответ 3

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

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

<item
    android:id="@+id/action_register"
    android:showAsAction="always"
    android:icon="@drawable/some_icon"
    android:title="@string/login_menu_register" />
<item
    android:id="@+id/action_register2"
    android:showAsAction="always"
    android:icon="@drawable/some_icon2"
    android:title="miau" />

</menu>

Ответ 4

Вопрос был обновлен, чтобы включить ответ, но для тех, кто заинтересован в официальной документации, см. http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems и оплачивать определенные внимание к примечанию об использовании пользовательского пространства имен для атрибута showAsAction.

Ответ 5

<item
    android:id="@+id/ok"
    android:icon="@drawable/ic_ok"
    android:orderInCategory="0"
    android:showAsAction="ifRoom"
    android:title="OK"/>

Ответ 6

У нас есть два способа решить эту проблему.

  • Вам нужно добавить libs "ActionBarSherlock". Это использование ActionbarSherlock.

ИЛИ  2. Вам нужно добавить libs "android-Support-v7". Если вы выбрали этот метод, то вашему menu.xml понадобится следующее:

<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:v7="http://schemas.android.com/apk/res-auto" >
<item
    android:id="..."
    android:icon="..."
    android:showAsAction="always"
    android:title="..."
    v7:showAsAction="always"/>
</menu>

Ответ 7

Это также верно для панели инструментов Android в новых концепциях Material Design в AppCompat-v21 и API уровнях 21 и выше.