web-dev-qa-db-ja.com

Androidツールバーメニューが表示されない

ツールバーにメニューを追加しようとしています。 onCreateOptionsMenuActivityメソッドが呼び出されますが、メニューは表示されません。

これは、dashboard.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="com.app.Android.ui.dashboard.DashboardActivity">

    <item
        Android:id="@+id/action_scan_qr"
        Android:icon="@drawable/ic_drawer"
        Android:title="@string/menu_scan_qr"
        app:showAsAction="always" />
</menu>

注:このメニューのアイコンは、アクションバーの背景色よりも暗いため、表示されるはずです。

アクティビティの膨張メニュー:

public class DashboardActivity extends ActionBarActivity {

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.dashboard, menu);

    return true;
}

そして、アプリケーションのメインテーマ:

<style name="Theme.Application.Base" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@Android:color/white</item>
        <item name="colorPrimaryDark">@Android:color/white</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="drawerArrowStyle">@style/Theme.Application.DrawerArrowStyle</item>
        <item name="Android:textColorSecondary">@Android:color/darker_gray</item>
</style>

onCreateOptionsMenuが呼び出されるのにメニューが表示されない理由。 appcompat-v7:21.0.3を使用しています

編集:

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentViewId());

        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        if (toolbar == null) {
            throw new Error("Can't find tool bar, did you forget to add it in Activity layout file?");
        }

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }
26
Procurares

理由はわかりませんが、onPrepareOptionsMenuメソッドで関連するすべてのメニューを膨らませると、すべてが正常に機能します。

@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.dashboard, menu);

    return super.onCreateOptionsMenu(menu);
}
25
Procurares

私も同じ問題に直面していましたが、実際のエラーはJavaアクティビティでツールバーを導入するのを忘れていました

AppCompactActivityの下で、on createメソッドの下でidでツールバーを定義し、setSupportActionBar(ToolBar);を呼び出します

例は次のとおりです。

public class secondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
34
Shubham

以下を試してください:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:tools="http://schemas.Android.com/tools"
      xmlns:app="http://schemas.Android.com/apk/res-auto"
      tools:context="com.example.lolipoptest.MainActivity" >

<item
    Android:id="@+id/action_settings"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_settings"/>
</menu>

およびJavaコード:

@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, menu);
    return true;
}
8
Akash

ダッシュボードのレイアウトにツールバーがありますか?アクティビティでsetSupportActionBar(toolbar)を呼び出します。アクティビティにTheme.AppCompat.NoActionBarテーマを使用します(ツールバーを使用している場合)

import Android.os.Bundle;
import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.widget.Toolbar;
import Android.view.Menu;

public class DashboardActivity extends ActionBarActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  getSupportActionBar().setHomeButtonEnabled(true);
}

@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.dashboard, menu);
  return super.onCreateOptionsMenu(menu);
 }

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

スタイルを確認してください。

<resources>

<!-- Base application theme. -->
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="Android:windowBackground">@color/white</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme" parent="AppTheme.Base">

</style>

<style name="ToolbarTheme" parent="AppTheme" >
</style>

<color name="light">#FFBB33</color>
<color name="colorPrimary">#FFBB33</color>
<color name="textColorPrimary">#FFBB33</color>
<color name="colorPrimaryDark">#FF8800</color>
<color name="colorAccent">#ff9977</color>
<color name="white">#ffffff</color>

</resources>

レイアウトを確認してください。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:minHeight="?attr/actionBarSize"
    app:titleMarginStart="20dp"
    Android:paddingRight="10dp"
    Android:background="@color/colorPrimaryDark"
    app:theme="@style/ToolbarTheme" />

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="15dp"
    Android:text="Hello Toolbar" />

</LinearLayout>

マニフェストのアクティビティにテーマを追加する

Android:theme="@style/AppTheme"
7
Sujith

フラグメントからメニューを膨らませている場合、例えばonCreateOptionsMenuメソッドをオーバーライドすることにより、必ずフラグメントのonCreateViewsetHasOptionsMenu(true)を呼び出してください

3
egorikem

変更してみてください:

 ....
xmlns:app="http://schemas.Android.com/apk/res-auto" >
 ....
app:showAsAction="ifRoom" 

に:

 ....
xmlns:yourapp="http://schemas.Android.com/apk/res-auto" >
 ....
yourapp:showAsAction="ifRoom" 

https://developer.Android.com/training/basics/actionbar/adding-buttons.html

2
Yvette Colomb

Toolbarを使用している場合は、onCreateのサポートアクションバーとして設定する必要があります。

setSupportActionBar(toolbar);

1
Leon

アクティビティのonCreateOptionsMenuでメニューを膨らませる必要があります。

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu, menu);
        return super.onCreateOptionsMenu(menu);
    }
1
j2emanue

Mipmapフォルダーの下に必要なアイコンを追加します

ic_menu_options

Menu_analysis.xmlを作成します(メニューフォルダーvalues.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="com.app.Android.ui.dashboard.DashboardActivity">
         <item
            Android:id="@+id/action_scan_qr"
            Android:icon="@mipmap/ic_menu_options"
            Android:title=""
            app:showAsAction="always" />
</menu>

Javaクラスの下のonPrepareOptionMenu

@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu_analysis, menu);
    return super.onCreateOptionsMenu(menu);
}
0
Tarit Ray

私は次のように書きました

MenuInflater(this).inflate(R.menu.my_menu, menu)

しかし、コードを次のように変更しました。

menuInflater.inflate(R.menu.my_menu, menu)

そしてそれは働いた!

(私はkotlinを使用しており、このコードはアクティビティで書かれています)

0
david

OnCreateメソッドでsetSupportActionBar(toolbar)を使用します。

0
Fahad Ali

私の場合、それは愚かな単純なものでした。私のツールバーはAppBarLayoutの子であり、何らかの理由で、制約レイアウトでツールバーを設定していたとき、ツールバーのlayout_width xmlパラメーターが0dpに設定されていました。ツールバーはそこにありましたが、見えません...(> _ <)

そのため、上記の情報が役に立たない場合は、「layout_width」および「layout_height」パラメーターを確認してください。

これが誰かの時間を節約することを願っています:)

次のようにxmlレイアウトファイルを追加した後、ツールバーの初期化が行われていることを確認してください。

setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);
0
Clarence Lunalo

App:showAsActionからAndroid:showAsActionに変更すると、問題は解決します。

0
messi

受け入れられた答えは機能しますが、メニュー項目が2回レンダリングされます。これを回避したばかりなので、次のようにしてみてください。

  1. super.onCreateOptionsMenu(menu);の代わりに_return true;_を忘れないでください
  2. サポートアクションバーを設定することを忘れないでくださいsetSupportActionBar(findViewById(R.id.toolbar))
  3. カスタマイズされたツールバーを使用する場合は、デフォルトのアプリタイトルをオフにすることをお勧めします:getSupportActionBar().setDisplayShowTitleEnabled(false)
0
Lê Vũ Linh