【问题标题】:Android Action bar only showing in overflowAndroid 操作栏仅在溢出中显示
【发布时间】:2014-05-13 08:41:38
【问题描述】:

在我的 android 应用程序中 .. 我正在尝试使用 seARCH 图标放置搜索编辑文本 .. 但我在操作栏中看不到搜索图标,而是标题溢出。我在下面给出我的代码

活动

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
  <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="always"/>
  <item
        android:id="@+id/action_settings"
        android:title="Settings"/>

</menu>

主要活动

public class MainActivity extends ActionBarActivity 

{

     WebView wv1;

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

        setContentView(R.layout.activity_main);



        wv1 = (WebView) findViewById(R.id.wView1);
        wv1.getSettings().setJavaScriptEnabled(true);
        wv1.loadUrl("http://www.example.com/songs/");




    }

     public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.activity_main_actions, menu);

            return super.onCreateOptionsMenu(menu);
        }
}

【问题讨论】:

    标签: android menu android-actionbar icons


    【解决方案1】:

    在 onCreateOptionsMenu 中使用 Search Manager n 搜索视图

        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_main_actions, menu);
    
        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        searchView.setSearchableInfo(searchManager
                .getSearchableInfo(getComponentName()));
    
        return super.onCreateOptionsMenu(menu);
    }
    

    并在您的 main.xml 中添加此项以供搜索

       <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom"
          android:actionViewClass="android.widget.SearchView"/>
    

    【讨论】:

    • 没什么...只有白屏来了
    • 你的目标设备是什么?
    • minsdk = 8 和 maxsdk = 19
    【解决方案2】:
    我认为你必须返回 `true` 而不是 super.onCreateOptionsMenu(菜单) 在 `onCreateOptionsMenu(Menu menu)` 方法中

    借口。那是错误的。

    我认为这个问题与您使用的基类有关。您正在继承 ActionBarActivity 而不是 Activity。这意味着您正在使用与以前版本的兼容性。为此,您需要将应用程序的主题设置为 Theme.AppCompat(或类似的),并且还包括支持库。看here

    【讨论】:

    • 没有同样的问题..我给了 return true;
    • 但是,您是否删除了对 super.onCreateOptionsMenu(menu) 的调用?我认为它会创建一个空菜单。如果您在充气后调用它,它将被替换。
    【解决方案3】:

    我刚刚意识到如何解决这个问题!

    您的菜单 xml 文件应该有一个起始标记,如:

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:myApp="http://schemas.android.com/apk/res-auto" >
    

    你可以替换

    我的应用

    使用任何您想要的名称,现在重要的部分是定义操作项时:

    <item
        android:id="@+id/actionitem_switch_view"
        android:title="@string/view_as"
        android:showAsAction="always"
        myApp:showAsAction="always"
        android:icon="@drawable/ic_action_view_as_list"/>
    

    您将有两个 showAsAction 标签,一个用于 API仔细观察两个showAsAction标签是不同的,一个来自Android命名空间,另一个来自你在菜单起点定义的标签

    【讨论】: