私はアプリでAndroid ActionBar
を使用しようとしていますが、オーバーフローメニューに隠れているオプションがあります。
そこには多くのドキュメントがありますが、そのほとんどは非常に古いバージョンのAndroidにのみ関連するため、混乱を招きます。同じ概念を適用しようとしても、機能しなくなったり、動作が異なったりします。
これは私のActivity
レイアウトにあります
_<Android.support.v7.widget.Toolbar
Android:id="@+id/my_toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:titleTextColor="@Android:color/white"
Android:background="@color/colorPrimary"
Android:elevation="4dp"
Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
_
そして、これは私のActivity
のonCreate()
メソッドにあります
_// sets up activity toolbar
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
myToolbar.showOverflowMenu();
myToolbar.setTitleTextColor(R.color.lightPrimaryText);
_
メニューxmlファイルをonCreateOptionsMenu()
から膨らませてみましたが、それでも望んだ結果が得られませんでした。
res/menuリソースフォルダーで、Menu
のToolbar
を定義します。例:
toolbar_menu.xml
_<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
tools:context=".activity.MainActivity">
<item
Android:id="@+id/action_sign_out"
Android:title="@string/toolbar_sign_out"
app:showAsAction="never"/>
</menu>
_
_app:showAsAction="never"
_を設定すると、このMenuItem
はToolbar
に表示されず、代わりにオーバーフローメニューに配置されます。
Activity
のテーマは、NoActionBar
テーマ(_Theme.AppCompat.NoActionBar
_のいずれか、または使用する場合は_Theme.MaterialComponents.NoActionBar
_のいずれか(または派生)でなければなりません 材料成分 )。
Activity
で、Toolbar
を設定します。
_Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
_
onCreateOptionsMenu()
をオーバーライドして、以前に定義したメニューリソースを膨張させます。
_@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
return true;
}
_
onOptionsItemSelected()
をオーバーライドして、MenuItem
(s)のonClick動作を定義できます。
_@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_sign_out: {
// do your sign-out stuff
break;
}
// case blocks for other MenuItems (if any)
}
return true;
}
_
マニフェストファイルで宣言
Android:theme="@style/AppTheme.NoActionBar"
このような :
<activity
Android:name=".ActivityName"
Android:label="@string/label"
Android:theme="@style/AppTheme.NoActionBar" />
これをあなたのスタイルに追加してください:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
activity onCreate()でこれを呼び出します:
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
アクティビティでこのメソッドをオーバーライドします。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.product_list, menu);
//U can find item set icon and stuff...
MenuItem item= menu.findItem(R.id.action_search);
return true;
}
オーバーフローメニューの場合、次のようにメニューを宣言します。
<?xml version="1.0" encoding="utf-8"?>
<menu >
<group>
<item
Android:id="@+id/sign_out"
Android:title="@string/sign_out" />
<item
Android:id="@+id/about"
Android:title="@string/about" />
</group>
</menu>
ハンドル項目の選択については、これを呼び出します
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.sign_out:
//do stuff
break;
}
return super.onOptionsItemSelected(item);
}
完了:)