我在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(截图)
等应用程序中完成的四方
Yelp
如果有一个开源实现,它将非常有用,因为我需要大量的自定义。
答案 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相同)。