默认展开Android SearchView

23

我正在使用Android Studio开发一个简单的应用程序,最低API级别为8。现在我正在使用android.support.v7.widget.SearchView将其放置在content_main.xml布局的LinearLayout中,而不是在ACTIONBAR中。现在的问题是,我无法将searchView默认设置为Expanded,我已经寻找了解决方案,只得到了这个:

android:iconifiedByDefault="false"

这是我的searchView的完整代码

          <android.support.v7.widget.SearchView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/searchView"
            android:background="#00000000"
            android:iconifiedByDefault="false"
            android:layout_weight="1" />

但是没有运气,它不起作用。有人可以帮我吗?任何帮助都将不胜感激。非常感谢!


尝试这个:searchItem.expandActionView(); - activesince93
有没有不需要编程设置的解决方案?我想在布局上进行设置。 :-) 谢谢! - bernzkie
如果在xml文件中设置无效,那么你应该考虑编程部分。 - activesince93
啊,我对以编程方式设置它有不好的预感,我的意思是,一旦应用程序启动,如果我没记错的话,第一个读取的文件将是XML布局?然后无论XML布局中有什么都将被Java代码覆盖,我想让它更有组织性,就像由于第一个读取的文件是XML,所以我想在XML上设置它,这样就不会再进行覆盖了。 - bernzkie
无论如何,我尝试了你建议的代码,但是没有起作用? - bernzkie
可能是自动扩展并自动聚焦SearchView的重复问题。 - Sufian
3个回答

64

好的,所以我解决了这个问题。对于想要使用支持库实现SearchView的人,以下是如何自定义它的方法。

<android.support.v7.widget.SearchView
    android:id="@+id/searchView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:closeIcon="@drawable/ic_clear" // To set custom clear icon
    app:searchIcon="@drawable/ic_search" //To set custom search icon
    app:queryBackground="@color/transparent" // i decided to remove underline so i create a custom background for my searchView
    app:queryHint="@string/filterHint" //to set a custom Hint
    app:iconifiedByDefault="false" //And finally, to Expand it as default
/>

就像我之前说的一样,我担心在运行时通过Java代码覆盖XML布局,因此为了使其组织有序且不会在运行时进行重写,这是我所做的。

参考

感谢帮助!!!


11

我使用以下代码来扩展搜索视图并同时放置光标:

final SearchView sv = new SearchView(((MainActivity) getActivity()).getSupportActionBar().getThemedContext());
        sv.setIconifiedByDefault(true);
        sv.setFocusable(true);
        sv.setIconified(false);
        sv.clearFocus();
        sv.requestFocusFromTouch();

4

要使SearchView默认展开,初始化时调用setIconifiedByDefault(false)(例如在onCreate(..)中)。我发现在大多数情况下,这会自动给它焦点,但如果没有,只需调用requestFocus()。


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