【问题标题】:How to change SearchView back button如何更改 SearchView 后退按钮
【发布时间】:2018-03-02 04:03:32
【问题描述】:

我的工具栏上有一个 SearchView,我想更改默认后退按钮的图标。

这是我的工具栏:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_awesome_toolbar"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/actionBarSize"
    app:titleTextColor="@android:color/black"
    android:elevation="5dp">

</android.support.v7.widget.Toolbar>

这是我的 SearchView 的布局:

<?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">

    <item android:id="@+id/search"
        android:title="@string/search"
        app:icon="@drawable/ic_search_black_24dp"
        android:icon="@drawable/ic_search_black_24dp"
        app:showAsAction="always|collapseActionView"
        android:maxWidth="50dp"
        app:actionViewClass="android.support.v7.widget.SearchView"/>

</menu>

这就是我在我的活动中创建选项菜单的方式:

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

    SearchManager searchManager = (SearchManager)
            getSystemService(Context.SEARCH_SERVICE);
    searchMenuItem = menu.findItem(R.id.search);

    searchView = (SearchView) searchMenuItem.getActionView();

    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    searchClose.setImageResource(R.drawable.ic_action_cancel_black);
    searchClose.setVisibility(View.VISIBLE);

    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) searchClose.getLayoutParams();
    params.gravity = Gravity.RIGHT;
    searchClose.setLayoutParams(params);

    searchClose.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            //Clear query
            searchView.setQuery("", false);
            //Collapse the action view
            searchView.onActionViewCollapsed();
            //Collapse the search widget
            searchMenuItem.collapseActionView();

            listview.setVisibility(View.GONE);

            viewPager.bringToFront();

            appBarLayout.setVisibility(View.VISIBLE);
        }
    });

    for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
        textView.setTextColor(Color.BLACK);
        textView.setHintTextColor(Color.BLACK);
    }

    searchView.setSearchableInfo(searchManager.
            getSearchableInfo(getComponentName()));
    searchView.setSubmitButtonEnabled(true);
    searchView.setOnQueryTextListener(this);

    return true;
}

这个的输出是:

我想要的是在右侧隐藏这个图标,或者至少将图标更改为我在发布的关于我的 Activity 的代码中定义为 ImageView 的“x”图像。

【问题讨论】:

    标签: android android-toolbar searchview


    【解决方案1】:

    只需通过样式更改它是最简单的方法。

    <style name="Theme.myCustomThemeForMyApp" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/myCustomUpIndicator</item>
    

    这里我会修改以进一步帮助。

       <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@color/white</item>
        <item name="android:actionMenuTextColor">@color/white</item>
        <item name="android:homeAsUpIndicator">@drawable/ic_account</item>
    </style>
    

    这是一个基本主题的普通示例,它修改了原色、原色、重音、windowbackground actionmenu 文本颜色,最后是 homeAsUpIndicator 可绘制对象。

    然后将其应用到您的活动或应用中,如下所示:

    <application
        android:name="com.appstudio35.application.A35Application"
        android:allowBackup="true"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:roundIcon="@drawable/app_icon"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    

    您也可以选择将主题移动到子样式,例如扩展父主题并从基础主题中移除 up drawable 以避免影响所有活动:

     <style name="AppTheme.CustomUp">
        <item name="android:homeAsUpIndicator">@drawable/ic_account</item>
    </style>
    

    并且只适用于这样的特定活动:

    <activity
            android:name="com.appstudio35.activities.MainActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.CustomUp"/>
    

    【讨论】:

    • 感谢您的回复!如何将此样式应用于 SearchView?
    • 样式通过清单应用。您的样式文件夹中已经有一个默认的 AppTheme,只需制作一个像上面这样指向您的可绘制对象的项目。然后只需将该样式分配给您的活动或 AppTheme 应用程序,它就会起作用。通过将 AppTheme 分配给您的应用程序,它通过活动传播。然后通过覆盖 android:defaultStuff 来控制 android 控件的样式。有道理?您可以在造型方面做很多事情。
    • 嗨,目前当我点击 searchView 图标时,会打开 searchView 并出现 listView。当我单击“searchView 的“返回”箭头按钮时,它会关闭 searchView,但会打开 listView。如何让 searchView 的“返回”按钮在关闭 searchView 的同时关闭 listView?
    • 您好iBek,在option item selected方法中处理即可。 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 响应操作栏的 Up/Home 按钮案例 android.R.id.home: finish();返回真;默认值:返回 super.onOptionsItemSelected(item); } }
    • 确定@nuynait工具栏工具栏=(工具栏)findViewById(R.id.toolbar); setSupportActionBar(工具栏); toolbar.setNavigationIcon(R.drawable.ic_action_back);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2016-04-11
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多