Android:自定义SearchView布局

时间:2018-06-05 20:02:24

标签: android searchview

我在Android开发人员guide之后使用搜索小部件实现搜索界面。菜单在res / menu / options_menu.xml中定义

<menu>
    <item android:id="@+id/search"
        android:title="@string/search_view_title"
        android:icon="@drawable/ic_search_white_24dp"
        android:orderInCategory="100"
        app:showAsAction="collapseActionView|ifRoom"
     app:actionViewClass="android.support.v7.widget.SearchView"/>

然后在我的活动中膨胀

public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.options_menu, menu);
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    MenuItem searchAction =  menu.findItem(R.id.search);
    SearchView searchView = (SearchView) searchAction.getActionView();

    searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchableActivity.class)));
    searchView.setSubmitButtonEnabled(true);
    searchView.setQueryRefinementEnabled(true);

    return true;
}

它按预期工作,但我现在需要的是在主要文本下添加第二个TextView。它将用于选址。 我需要的是在Foursquare或Yelp(截图)

等应用程序中完成的

四方

Foursquare Search widget

Yelp

Yelp search widget

如果有一个开源实现,它将非常有用,因为我需要大量的自定义。

1 个答案:

答案 0 :(得分:0)

我终于找到了一个解决方案,我认为这种方法不那么具有侵略性,并且不需要重写新的自定义SearchView课程。 SearchView有一个包含其所有组件视图的主要布局R.layout.abc_search_view。但它们都是水平对齐的。我没有更改现有布局中的配置,因为这会产生很多影响,并且可能会在下一个版本中发生变化。 所以我添加了新的LinearLayout作为现有的兄弟姐妹。然后我可以在这个新布局中添加我想要的任何内容。甚至可以从原始位置移动任何视图的位置(影响较小)。

MenuItem searchAction =  menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchAction.getActionView();
//Make sure the new layout will be added under the existing SearchView child Layout 
searchView.setOrientation(SearchView.VERTICAL);
LinearLayout locationLayout  = new LinearLayout(this);
locationLayout.setLayoutParams(new LinearLayout.LayoutParams
    (LinearLayout.LayoutParams.MATCH_PARENT,
    LinearLayout.LayoutParams.WRAP_CONTENT,1f));

TextView searchLocationView = new TextView(this);
searchLocationView.setLayoutParams(new
    SearchView.LayoutParams(SearchView.LayoutParams.MATCH_PARENT,
    SearchView.LayoutParams.WRAP_CONTENT,1f));
searchLocationView.setText("R.string.my_location");
locationLayout.addView(searchLocationView);

当然,您可以从资源中扩充新布局。请注意,必须调整工具栏的高度以显示布局。

布局检查器中的屏幕截图中的结果(使用LinearLayoutCompat的屏幕截图,但结果与代码中的LinearLayout相同)。

enter image description here