70

Androidでオプションメニューを機能させるのに問題があります。以前にアプリを作成しましたが、すべて正常に機能しましたが、メニューがポップアップしません。

コード:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    getMenuInflater().inflate(R.menu.activity_video, menu);
    return true;
}

メソッド全体が呼び出されることはありません(ブレークポイントを設定してチェックされます)。アクティビティは非常にシンプルでVideoViewOnTouchListenerセットが含まれているだけです。

Samsung Galaxy 10.1、APIレベル15、minSDK15でAndroid4.0.4を使用しています。何か足りないものがありますか?

4

12 に答える 12

76

Android の最新バージョンでは、ツールバーに互換ライブラリを使用する場合、これが非常に一般的です。メニュー項目をツールバーに表示するには、次の手順を実行する必要があります。

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
于 2015-07-27T05:19:54.030 に答える
59

最初setHasOptionsMenuから関数を呼び出します。が自動的に呼び出されますonCreateonCreateOptionsMenu

これを試して:

setHasOptionsMenu(true)
于 2013-10-18T03:23:58.850 に答える
35

テストする電話にメニュー ボタンがある場合、 onCreateOptionsMenu はテーマの開始時に呼び出されません。

android:theme="@android:style/Theme.Black.NoTitleBar"

ただし、メニュー ボタンをクリックすると、onCreateOptionsMenuが呼び出されます。ハードウェアボタンのない電話で何が起こるかわかりません...

于 2012-11-07T10:05:43.710 に答える
29

method:に以下Fragment#onCreateView(...)を入れてください:

setHasOptionsMenu(true);

次に、メソッドが呼び出されます。

于 2015-08-30T07:58:19.413 に答える
16

これは、アクティビティにツールバーがないためです。

それを行うには2つのステップがあります。

最初に、res/layout にある activity.xml にツールバーを追加する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"">

    <!-- add this part-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

次に、アクティビティに追加させます

JAVAで

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

またはコトリンで

val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar)
于 2019-03-21T11:27:00.310 に答える
4

私は同じ問題を抱えていました(メニューが表示されonCreateOptionsMenuない、呼び出されない)。

これをフラグメント内で呼び出す場合は、public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)notをオーバーライドする必要がありますpublic boolean onCreateOptionsMenu(Menu menu)Fragments後者を使用しないでください。

アクティビティメニュー

フラグメントメニュー

于 2013-12-04T21:53:48.853 に答える
2

これは、styles.xml で次のようなテーマを定義したために発生します。

<style name="AppTheme" parent="Theme.AppCompat.Light.**NoActionBar**">

手動でツールバーを作成してから、それをアクティビティに追加する必要があります。

ツールバー ビューの xml は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</androidx.appcompat.widget.Toolbar>

次に、アクティビティで、それを「表示」する必要があります。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
    actionBar.setDisplayShowTitleEnabled(false);
}

これで、既知の onCreateOptionsMenu を使用してメニューを作成できます

于 2021-02-27T23:30:25.753 に答える
0

上記の回答がうまくいかない場合は、ツールバーと同じIDを使用していることを確認してください。

layout_app_bar.xml

<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize">

Activiy_main.xml

<include
    android:id="@+id/app_bar"
    layout="@layout/layout_app_bar" />

Java ファイル内:

電話しないでください:

Toolbar tb = findViewById(R.id.toolbar);

電話してください:

Toolbar tb = findViewById(R.id.app_bar);
于 2019-09-07T11:59:07.307 に答える
-3

これを試してみてくださいそれは私のために働きます:---

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.home_page_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.menu_delete:
        Toast.makeText(this, "You pressed the Delete!",
                 Toast.LENGTH_LONG).show();
        break;


      case R.id.menu_setting:
     Intent intent=new Intent(HomePage.this,Setting.class);
     startActivity(intent);
     finish();
     Toast.makeText(this, "You pressed the Setting!",
     Toast.LENGTH_LONG).show(); break;


    }

    return super.onOptionsItemSelected(item);
}
于 2012-11-07T09:54:32.540 に答える