![](/img/trans.png)
[英]Android: how to replace the three dots in the TOOLBAR menu (not the action bar)
[英]Android Action Bar Three Dots not displayed
請幫忙,我做了一個自定義菜單(添加了支持庫)(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放入三個點(操作欄),而不是硬件菜單按鈕(沒有任何黑客攻擊)。
主要活動
@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;
如果要顯示三個點,無論設備菜單按鈕如何! 然后你可以在你的應用程序類'onCreate方法中調用這個方法 -
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();
}
}
沒有任何黑客攻擊 ,你無法在所有設備上執行此操作。 那些具有硬件菜單按鈕的設備(我不確定是否全部都是)將使用它而不是溢出按鈕(...)。
哪種,是一種好事。 這些設備的用戶用於按菜單按鈕進入菜單。 所以對他們來說,缺少溢出按鈕是正常的行為。
對於那些使用溢出按鈕的設備,Android將根據您在showAsAction
標簽中的提示決定放置什么。 這取決於屏幕尺寸,方向等。 此頁面有一個表格,顯示了顯示的圖標數量(其余圖標顯示在溢出菜單中)。
請測試顯示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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.