新しいAPI 21ツールバーとappCompat_v7で2日間苦労した後、バグを見つけたと思います。メニューに次のような2つのアクションがある場合:
<item
Android:id="@+id/action_test"
Android:showAsAction="always"
Android:icon="@drawable/ic_launcher"
Android:title="@string/action_settings"/>
<item
Android:id="@+id/action_settings"
Android:orderInCategory="100"
Android:showAsAction="never"
Android:title="@string/action_settings"/>
そして、このように定義されたappCompatツールバー:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.toolbar.MainActivity" >
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="52dp"
Android:id="@+id/toolbar">
</Android.support.v7.widget.Toolbar>
</RelativeLayout>
膨張後(またはsetSupportActionBarメソッドを設定した後)
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
toolbar.setTitle("esurance");
setSupportActionBar(toolbar);
ツールバーメニューが表示されますなしアクションアイコン、オーバーフローメニューに表示されます。
ただし、API 21のToolbarクラスを使用すると、メニューレイアウトで定義されたアクションが表示されます...
<Toolbar
Android:layout_width="match_parent"
Android:layout_height="52dp"
Android:id="@+id/toolbar">
</Toolbar>
ここに何かが足りないかもしれませんが、これまでのところ、appCompatを使用してオーバーフローメニューの外にアクションを表示できませんでした。これに関するヘルプは大歓迎です。
アクションバーのトレーニング ごとに、app:showAsAction
属性ではなくAndroid:showAsAction
属性:
上記のshowAsAction属性は、
<menu>
タグ。これは、サポートライブラリで定義されたXML属性を使用する場合に必要です。これらの属性は、古いデバイスのAndroidフレームワークに存在しません。したがって、すべての属性のプレフィックスとして独自の名前空間サポートライブラリで定義されています。
したがって、メニューファイルは次のようになります。
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto" >
<item
Android:id="@+id/action_test"
app:showAsAction="always"
Android:icon="@drawable/ic_launcher"
Android:title="@string/action_settings"/>
<item
Android:id="@+id/action_settings"
Android:orderInCategory="100"
app:showAsAction="never"
Android:title="@string/action_settings"/>
</menu>
まず、app:showAsAction
の代わりにAndroid:showAsAction
(@ianhanniballakeなど)を使用します。その後、onCreateActionMode
で、このようなコードでメニューsetShowAsAction
を拡張した後、
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.your_menu_name, menu);
menu.findItem(R.id.your_first_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.findItem(R.id.your_second_menu_id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
私は同じ問題を抱えていたので、それに取り組んだ後、これらのコード行はうまくいきます。
プット
xmlns:app = "http://schemas.Android.com/apk/res-auto"メニュータグをint
このような
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
次にapp:showAsAction = "always"
を使用します
app:showAsAction
ではなく、すべてのメニュー項目でAndroid:showAsAction
を使用することを忘れないでください
`