【问题标题】:Custom Icon in SearchView AndroidSearchView Android中的自定义图标
【发布时间】:2016-12-27 10:50:35
【问题描述】:

我在ToolBar 中有Ham Burger Navigation Drawer IconApp NameSearch Icon。这是我HomeScreen 的一小部分。

当我点击Search Icon时,SearchView显示如下:

Navigation Drawer 中有一个 Back Icon。我想禁用/隐藏它,并在此处添加自定义的。

我的SearchView 具有以下属性:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/menu_item_search_places"
    android:icon="@android:drawable/ic_search_category_default"
    android:title="Search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always|collapseActionView" />

我正在处理Fragment。在这里可以做什么,以便我禁用/隐藏后退图标并包含自定义图标?

编辑:

我可以通过更改我的 styles.xml 文件来自定义图标,其中 我包括这个:

<resources>
<style name="ToolbarTheme" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/white</item>
    <item name="actionMenuTextColor">@color/white</item>
    <item name="homeAsUpIndicator">@drawable/ic_arrow_back_black_24dp</item>
</style>
</resources>

现在,我该如何处理禁用/隐藏后退图标?

我试过了,但我找不到解决方案。

((ToolbarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);
((ToolbarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(false);

【问题讨论】:

    标签: android android-studio navigation-drawer searchview


    【解决方案1】:

    在你的 Fragment 中试试这个:

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem searchViewMenuItem = menu.findItem(R.id.action_search);    
        mSearchView = (SearchView) searchViewMenuItem.getActionView();
        int searchImgId = getResources().getIdentifier("android:id/search_button", null, null);
        ImageView v = (ImageView) mSearchView.findViewById(searchImgId);
        v.setImageResource(R.drawable.your_new_icon); 
        mSearchView.setOnQueryTextListener(this);
        return super.onPrepareOptionsMenu(menu);
    }
    

    【讨论】:

    • 我无法隐藏back icon
    【解决方案2】:

    您可以通过编程方式将 drawable 设置为 homeAsUp 按钮 -

    ActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);
    

    用于支持操作栏 -

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);
    

    隐藏向上按钮 -

    actionBar.setDisplayShowHomeEnabled(false); 
    

    【讨论】:

    • 在添加新之前,我需要先隐藏或禁用。
    • 你可以使用-drawerToggle.setDrawerIndicatorEnabled(false);
    • 我已经编辑了我的答案。您使用的是操作栏还是工具栏?
    【解决方案3】:

    这不是定制的。

    但是,我应用MenuItemCompat.OnActionExpandListener() {...} 方法来处理back iconclick event 并在onMenuItemActionCollapse(MenuItem item) {...} 方法上做我的事情。

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        inflater.inflate(R.menu.home, menu);
        searchItem = menu.findItem(R.id.menu_item_search_places);
        searchItem.setIcon(FontIconDrawable.inflate(getContext(), R.xml.ic_search));
        searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnSuggestionListener(this);
        searchView.setOnQueryTextListener(this);
        MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }
    
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                    // my stuff are here
               return true;
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-07
      • 2017-07-19
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2012-12-09
      相关资源
      最近更新 更多