アプリでappcompatを使用しています。メニュー項目をアクションバーに表示するか、少なくともオーバーフロー(3ドット)を表示して、スペースがないときに表示するようにします。アクションバーには多くのスペースがありますが、それでも表示されません。メニューフローは、メニューボタンが押されたときにのみ下から上がります。
menu_activity.xml:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/menu_lang"
Android:showAsAction="always"
Android:title="@string/menu_lang"
Android:icon="@Android:drawable/ic_input_lang"/>
</menu>
activity:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_activity, menu);
return true;
}
この post は、ハードウェアメニューボタンがある場合は機能しないことを示しています。ただし、他のアプリは同じデバイスでアイテムを表示できます。したがって、その答えは間違っているようです。誰かがこれを手伝ってくれますか?
間違ったメニューを使用しているようです。ファイルの名前は「menu_activity.xml」で、Resource-Idでメニューを膨らませます:R.menu.reminder_menu
メニューのリソース名はファイル名と同じである必要があります。つまり、R.menu.manu_activity
これでもう一度試してください-私はこれにも一度遭遇しました、そしてそれは私に夢中になりました...
Update上記の部分が難読化用であることを明確にした後、次のことを確認してください。
showAsAction
属性になり、互換性ライブラリがそれらを取得できるようになります。カスタム名前空間は既に定義されています(メニュータグの「app」)。 Androidガイドに従ってAndroid:showAsAction
タグをapp:showAsAction
に変更する必要があります。
修正されたmenu_activity.xmlは次のようになります。
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/menu_lang"
app:showAsAction="always"
Android:title="@string/menu_lang"
Android:icon="@Android:drawable/ic_input_lang"/>
</menu>
アクションバーの extended Android guide は、これらの新しい厄介なトラップをカバーしています...
さて、私はあなたのための解決策を見つけたと思います。オーバーフローメニューと呼ばれ、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();
}
}
これを試して、それがあなたのために働くかどうか私に知らせてください。
編集:
私は最終的にあなたの問題を理解したと思います。私はあなたに一つのアイデアを与えることができます。オーバーフローメニューを使用せず、投稿したスクリーンショットに表示されているとおりにメニュー項目を表示する場合は、アクティビティの上にレイアウトを作成できます。
直線的なレイアウトを取り、アクションバーと同じように見える背景を与え、そこに配置したいアイコンを配置し、onClickListenerで機能を与えることができます。これでアイデアが得られることを願っています。これにより、独自のカスタムメニューを作成できます。以下のレイアウトを試して、ic_launcher drawableをメニューアイコンに置き換えてください。次に、それらにonClickListenersを設定し、onClickメソッド内で実行したい機能を実行します。
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:background="#66000000" >
<ImageView
Android:id="@+id/xMenuBtn1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:background="@drawable/ic_launcher" />
<TextView
Android:id="@+id/xMenuTxt"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Chats"
Android:textSize="18sp"
Android:layout_toRightOf="@+id/xMenuBtn1"
Android:layout_centerVertical="true" />
<ImageView
Android:id="@+id/xMenuBtn2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toLeftOf="@+id/xMenuBtn3"
Android:background="@drawable/ic_launcher" />
<ImageView
Android:id="@+id/xMenuBtn3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:background="@drawable/ic_launcher" />
</RelativeLayout>
アクティビティonCreate()で試してください:
ActionBar bar = getSupportActionBar();
bar.setTitle(R.string.app_name);
その後 :
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
getSupportMenuInflater().inflate(R.menu.menu_activity, menu);
return super.onPrepareOptionsMenu(menu);
}