【问题标题】:Menu items won't show up in the actiobar菜单项不会显示在操作栏中
【发布时间】:2012-05-07 08:54:33
【问题描述】:

更新: 它在标签上有效,但在手机上由于某种原因它被覆盖了

我有一个关于 android 用于 ActionBar 的菜单项的问题,我有一个自定义背景用于我的 actionbar(图片)并在此处的代码中设置它。那段代码工作正常。但是当我尝试添加一个菜单项时,它失败了。

我想要的非常简单,我想要一个在屏幕底部显示“将产品保存为收藏”的按钮,例如底部操作栏。但是当我尝试将按钮添加为菜单项时,它不会显示,没有任何变化。

日志告诉我 onCreateOptionsMenu() 方法实际上已执行。有什么想法吗?

这是我想要菜单的活动:

package com.x;


import java.util.ArrayList;
import java.util.HashMap;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;

import com.x.R;
import com.x.products.fragments.*;
import com.x.tasks.ZoekQueryTask;
import com.x.util.Helper;
import com.x.util.UnscaledBitmapLoader;


public class ProductActivity extends Activity {

    private Bundle save;

    /** Called when the activity is first created. */
    @SuppressWarnings("rawtypes")
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.product);

        @SuppressWarnings("deprecation")
        LocalActivityManager manager = new LocalActivityManager(this, false);

        Helper helper = new Helper();
        save = null;
        String id = (String) getIntent().getExtras().get("id");
        String score = (String) getIntent().getExtras().get("score");
        String profileId = (String) getIntent().getExtras().get("profileId");

   //     String id = "138946";
    //    String profileId = "28";
    //    String score = "100%";
        String query  = "SELECT * FROM products WHERE id = "+id;
        ArrayList<HashMap> result = null;

        try {
            ZoekQueryTask zoekQueryTask = new ZoekQueryTask(query);
            result = zoekQueryTask.getResults();
        }

        catch(Exception e) {
            Log.e("Afgevangen error", e.getMessage());
        }



        TabHost tb = (TabHost) findViewById(R.id.tabs);
        manager.dispatchCreate(savedInstanceState);
        tb.setup(manager);



        Intent info = new Intent();
        info.setClass(this, InfoFragment.class);
        info.putExtra("result", result);
        info.putExtra("profileId", profileId);

        TabSpec tsInfo = tb.newTabSpec("info");
        tsInfo.setContent(info);
        tsInfo.setIndicator("info");



        Intent specs = new Intent();
        specs.setClass(this, SpecsFragment.class);
        specs.putExtra("result", result);

        TabSpec tsSpecs = tb.newTabSpec("specs");
        tsSpecs.setContent(specs);
        tsSpecs.setIndicator("specs");



        Intent prijs = new Intent();
        prijs.setClass(this, PrijsFragment.class);
        prijs.putExtra("result", result);

        TabSpec tsPrijs = tb.newTabSpec("Prijs");
        tsPrijs.setContent(prijs);
        tsPrijs.setIndicator("Prijs");

        TabSpec tsFotos = tb.newTabSpec("Fotos");
        tsFotos.setContent(info);
        tsFotos.setIndicator("Fotos");


        tb.addTab(tsInfo); 
        tb.addTab(tsSpecs);
        tb.addTab(tsPrijs);
        tb.addTab(tsFotos);



            final ActionBar actionBar = getActionBar(); 
            actionBar.setDisplayShowHomeEnabled(false);
            actionBar.setDisplayShowTitleEnabled(false);


            Bitmap bm = UnscaledBitmapLoader.loadFromResource(getResources(), R.drawable.logo, null);
            BitmapDrawable background = new BitmapDrawable(this.getResources(), bm);
            background.setTileModeX(android.graphics.Shader.TileMode.CLAMP); 
            actionBar.setBackgroundDrawable(background);



            TextView nameText = (TextView) findViewById(R.id.name);
            TextView scoreText = (TextView) findViewById(R.id.score);

            nameText.setText(result.get(0).get("name").toString());
            scoreText.setText(score);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        Log.i("hallo", "hoi");
        inflater.inflate(R.layout.product_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.save:
                Log.i("menu", "werkt");
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

这是菜单 XML:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/save"
          android:title="Opslaan in favorieten" >

    </item>
</menu>

【问题讨论】:

    标签: android android-activity menu android-actionbar


    【解决方案1】:

    我认为你需要解决这个问题:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        Log.i("hallo", "hoi");
        inflater.inflate(R.layout.product_menu, menu);  //  <- this is wrong
        return true;
    }
    

    而不是R.layout.product_menu,应该引用R.menu.your_desired_menu

    【讨论】:

    • 这只是xml文件的位置,改了还是不行
    • 改变了什么?您的菜单 xml 应位于项目的 menu 文件夹中
    • 是的,我知道,我把它放在菜单文件夹中,并将其更改为 R.menu.product_menu 但它仍然不起作用。这只是一个位置开关
    • 不,只是在我常用的操作栏之外什么都看不见,没有额外的项目
    • 清理您的项目并重新构建。如果仍然没有显示,那么你可能做错了什么
    【解决方案2】:

    如果您想在操作栏中显示您的菜单项,请在 product_menu.xml 中设置您的菜单项的android:showAsAction 属性;

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item 
            android:id="@+id/item1" 
            android:title="Save"
            android:showAsAction="always" />
    </menu>
    

    您可以将此属性设置为:

    • ifRoom
    • 从不
    • 带文字
    • 总是
    • collapseActionView

    希望对你有帮助!

    史蒂芬

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多