2013-11-02 12 views
10

Proszę o pomoc, Zrobiłem menu niestandardowe biblioteki (Dodano wsparcie) (OR-> main_activity_actions.xml)Android Action Bar trzy kropki nie są wyświetlane

<?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"/> 

Teraz co należy zrobić, aby umieścić action_settings w trzy kropki (paska akcji), zamiast menu sprzętowego (bez hackowania).

główną działalność

@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; 
} 

dobrze znalazłem hack ale czy jest jakiś inny sposób, pozwól mi znać,
Hack
umieścić ten kod w 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 
    } 

dla to musisz zaimportować

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

jeśli chcesz acheive tę siłę w pełni niż można użyć dostawcy działania – Hardik

+0

Nie trzeba dodawać «dziękuję» na pytanie; zaznaczenie odpowiedzi jako zaakceptowanej jest wszystkim, czego potrzebujemy. :-) –

Odpowiedz

3

Bez żadnego hackowania, nie można tego zrobić na wszystkich urządzeniach. Te urządzenia, które mają przycisk menu sprzętowego (nie jestem pewien, czy absolutnie wszystkie) użyją go zamiast przycisku przepełnienia (...).

Co, w pewnym sensie, jest dobrą rzeczą. Użytkownicy tych urządzeń są przyzwyczajeni do naciśnięcia przycisku menu, aby dostać się do menu. Tak więc dla nich brak przycisku przepełnienia jest normalnym zachowaniem.

Dla tych urządzeń, które używają przycisku przepełnienia, Android sam zdecyduje, co umieścić w oparciu o wskazówki w tagu showAsAction. Zależy to między innymi od rozmiaru ekranu, orientacji. This page ma tabelę pokazującą ile ikon jest wyświetlanych (reszta przechodzi do menu przepełnienia).

+0

Nie chcę tego robić na wszystkich urządzeniach, ale na tych, które obsługują tę funkcję. –

+0

Nie musisz robić nic specjalnego, ale jeśli masz urządzenie, które używa przycisku menu, nie dostaniesz go w 3 kropki bez hackowania. – Szymon

+0

Po prostu ostatnie pytanie, Hack jest dobry lub zły, mam na myśli, czy jest bezpieczny czy nie. –

1

Proszę przetestować ten kod do wyświetlania SherlokActionbar:

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; 
} 
13

Jeśli chcesz pokazać trzy kropki, niezależnie od przycisku menu urządzenia! Następnie można wywołać tej metody w swojej klasie aplikacji 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(); 
    } 
} 
+0

Genialny. To jedyna odpowiedź od Google, która mi pomogła! –

+0

Działa doskonale! – Erick

+0

+1. Dziękuję Ci. Miałem do czynienia z tą sprawą po aktualizacji do sdk kompilacji api 24 i uruchomieniu aplikacji w api wersji 14 i 16 Androida. Rozwiązujesz. – statosdotcom

Powiązane problemy