2013-11-02 5 views
10

を表示していない助けてください、 私はカスタムメニュー(追加のサポートライブラリ)(名 - > main_activity_actions.xml)を作っAndroidのアクションバー3つのドットが

<?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をハードウェアメニューボタン(ハックなし)の代わりに3つのドット(アクションバーの)に設定します。

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

だけでなく、私はハックが見つかりましたが、他の方法があるならば、私に知らせてきた、
ハック
の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; 
+0

あなたは完全にあなたがアクション・プロバイダ – Hardik

+0

追加する必要はありません使用することができますよりも、この力をacheiveたい場合は、 『あなたの質問に』ありがとうの中で、このメソッドを呼び出すことができます。受け入れられたとして回答をマークすることは、私たちが必要とするすべてです。 :-) –

答えて

3

ハックなしで、すべてのデバイスでこれを行うことはできません。ハードウェアメニューボタンを持っているデバイス(絶対にすべてであるかどうかわからない)は、オーバーフローボタン(...)の代わりに使用します。

どのようなものがいいですか。これらのデバイスのユーザーは、メニューボタンを押してメニューにアクセスするのに使用されます。したがって、オーバーフローボタンがないことは通常の動作です。

オーバーフローボタンを使用するデバイスの場合、Androidはタグのヒントに基づいてどこに配置するかを決定します。画面サイズ、方向などによって異なります。 This pageには、表示されるアイコンの数を示す表があります(残りはオーバーフローメニューになります)。

+0

私はすべてのデバイスでこれをやりたいとは思わないが、この機能をサポートしているデバイスでは。 –

+0

特別な操作は必要ありませんが、メニューボタンを使用するデバイスを使用している場合は、ハックせずに3ドットにすることはできません。 – Szymon

+0

ちょうど最後の質問、ハックは良いか悪いか、私はそれが安全かどうかを意味します。 –

1

表示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

あなたは3つのドットを表示したい場合は、関係なく、デバイスのメニューボタンの!そして、あなたはあなたのアプリケーションクラスのの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

Genious。これは私を助けたGoogleからの唯一の答えです! –

+0

優れた作品! – Erick

+0

+1。ありがとうございました。私はこの問題に直面していましたが、sdkをapi 24にコンパイルし、アンドロイドAPIバージョン14と16でアプリを実行しています。あなたは解決します。 – statosdotcom