Панель действий Android Три точки не отображаются

Пожалуйста, помогите, Я создал собственное меню (добавленные библиотеки поддержки) (name- > main_activity_actions.xml)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto"  >

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

Теперь, что я должен сделать, чтобы поместить action_settings в три точки (панели действий), вместо кнопки меню аппаратного обеспечения (без какого-либо взлома).

MainActivity

@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_activity_actions, menu);
    return true;
}

ну, я нашел хак, но если есть какой-то другой способ, дайте мне знать,
Hack
введите этот код в onCreate

 try {
        ViewConfiguration config = ViewConfiguration.get(this);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null) {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        }
    } catch (Exception ex) {
        // Ignore
    }

для этого вам нужно импортировать

import java.lang.reflect.Field;
import android.view.ViewConfiguration;

Ответ 1

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

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

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

Ответ 2

Если вы хотите показать три точки, независимо от кнопки меню устройства! то вы можете вызвать этот метод в своем классе приложения 'onCreate method -

private void getOverflowMenu() {

     try {
        ViewConfiguration config = ViewConfiguration.get(this);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null) {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config, false);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Ответ 3

Пожалуйста, протестируйте этот код для отображения Шерлок-артабара:

public class MainActivity extends SherlockActivity {
private com.actionbarsherlock.view.MenuItem mGoItem;
private com.actionbarsherlock.view.MenuItem mClearItem;

private static final int listSMS_ITEM_ID = 1;
private static final int Distance_ITEM_ID = 5;
private static final int About_ITEM_ID = 2;
private static final int Search_ITEM_ID = 3;
private static final int HELP_ITEM_ID = 4;

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

public boolean onCreateOptionsMenu(Menu menu) {

    mGoItem = menu.add(0, HELP_ITEM_ID, 0, null);
    mGoItem.setIcon(R.drawable.refresh).setShowAsAction(
            MenuItem.SHOW_AS_ACTION_ALWAYS);

    mGoItem = menu.add(0, Distance_ITEM_ID, 0, null);
    mGoItem.setIcon(R.drawable.ic_launcher).setShowAsAction(
            MenuItem.SHOW_AS_ACTION_ALWAYS);

    mGoItem = menu.add(0, listSMS_ITEM_ID, 0, null);
    mGoItem.setIcon(R.drawable.refresh).setShowAsAction(
            MenuItem.SHOW_AS_ACTION_ALWAYS);

    mGoItem = menu.add(0, Search_ITEM_ID, 0, null);
    mGoItem.setIcon(R.drawable.ic_launcher).setShowAsAction(
            MenuItem.SHOW_AS_ACTION_ALWAYS);

    return true;
}
// @Override
public boolean onOptionsItemSelected(
        com.actionbarsherlock.view.MenuItem item) {
    // TODO Auto-generated method stub
    /* return super.onOptionsItemSelected(item); */

    switch (item.getItemId()) {
    case listSMS_ITEM_ID:

        Toast.makeText(getApplicationContext(), "listSMS", 1).show();


        return true;

    case Search_ITEM_ID:

        Toast.makeText(getApplicationContext(), " Search", 1).show();

        return true;




    case Distance_ITEM_ID:

        Toast.makeText(getApplicationContext(), "  Distance", 1).show();
        return true;



        case HELP_ITEM_ID:
            Toast.makeText(getApplicationContext(), "  HELP", 1).show();
            //

            return true;


    }

    return false;
}