Android搜索界面 - 如何在调用onSearchRequested()时移除应用程序图标

7

在ActionBar上展开SearchView小部件

MainActivity.class中,我通过onSearchRequested()调用搜索对话框。这就是它如上图所示的方式。

我想要移除那个主页/应用程序图标,但没有成功。请不要把我想要在操作栏上移除主页/应用程序图标与此混淆。不,这是一个搜索对话框,我在SearchActivity.class中声明了它。

public class SearchableActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_searchable);

    // Get the intent, verify the action and get the query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        doMySearch(query);
    }
}}

并且在 xml/searchable.xml 上。

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer">

AndroidManifest.xml文件中
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="android.app.default_searchable"
                   android:value=".SearchableActivity"/>
    </activity>

    <activity
        android:name=".SearchableActivity" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
</application>

这是我使用的v21/styles.xml文件。

<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="android:colorPrimary">@color/orange</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="android:colorPrimaryDark">@color/darkorange</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="android:colorAccent">@color/brown</item>
    <!--   title bar text color -->
    <item name="android:textColorPrimary">@color/white</item>
    <!--   no action bar -->
    <item name="android:windowNoTitle">true</item>

</style>

如果您不介意,我还有另一个问题。当我将状态栏的颜色声明为darkorange时,它可以正常工作。但是当调用onSearchRequested()时,状态栏会变成黑色(如上图所示)。我该如何解决这个问题?


1
你已经尝试过什么来移除这个图标了吗? - zsolt.kocsi
一堆方法 <item name="android:displayOptions"></item>, <item name="android:icon">@android:color/transparent</item>, getActionBar().setHomeButtonEnabled(false);, getActionBar().setDisplayShowHomeEnabled(false);,但是不起作用。 - laph
尝试在模拟器中运行(甚至使用不同的模拟器)以查看问题是否仅出现在您的设备上还是其他设备上也有。 - zsolt.kocsi
@laph 你解决了吗?我也遇到了同样的问题。 - Denys Kniazhev-Support Ukraine
根据这个答案,它是不可定制的。 - bitCatcher
3个回答

1

根据您的情况,尝试以下任一方法

getSupportActionBar().setDisplayShowHomeEnabled(false);

or

getActionBar().setIcon(new 
ColorDrawable(getResources().getColor(android.R.color.transparent))); 

我不使用ActionBarSherlock,但它仍然无法工作。你的答案是如何在5分钟内就得到'+1'的? - laph

0
一个简单的解决方案是在搜索框获得焦点时使图标透明:
getActionBar().setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));  

然后,您可以通过调用应用程序图标来恢复它。


0

如果你想在 onsearchrequested 被调用时移除图标,你可以在 option_menu 的 xml 文件中添加 android:actionViewClass="android.widget.SearchView"

像这样

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/search"
          android:title="@string/search_title"
          android:icon="@drawable/ic_search"
          android:showAsAction="collapseActionView|ifRoom"
          android:actionViewClass="android.widget.SearchView" />
</menu>

你可以检查这个设置


这个解决方案对于SearchDialog不起作用。 :( - Rohit Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接