5

我已经按照这个问题的最佳答案来使SearchView我的 ActionBar 中的小部件适合自定义主题。它适用于纵向模式,但在横向模式下,操作系统将缩小 ActionBar 的高度以最大化内容屏幕空间。而不是SearchView像其他项目一样将没有边距的小部件安装到 ActionBar 中,而是在顶部被切掉:

顶部被切掉的 SearchView 小部件

我已经翻遍了 Android 源代码的 res-folder,但找不到任何专门的布局或资源来说明如何解决这个问题,甚至 Android 本身如何设法将默认的 Holo SearchViewWidget 放入简化的 ActionBar 中。

任何见解都值得赞赏。谢谢。

4

3 回答 3

3

您必须使用较小版本的编辑文本。可绘制对象的固有尺寸小于默认的编辑文本可绘制对象。

查看此处使用的可绘制对象

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/frameworks/support/v7/appcompat/res/drawable/abc_textfield_searchview_holo_dark.xml?av =f

于 2013-10-28T18:47:44.123 回答
3

我有一个类似的问题,并且能够通过简单地改变重力来解决它EditText

try {
    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    AutoCompleteTextView searchPlate = (AutoCompleteTextView) searchView.findViewById(searchPlateId);

    //fixes the gravity (fixes text cutoff for landscape mode)
    searchPlate.setGravity(Gravity.LEFT|Gravity.BOTTOM);
}
catch (Throwable t)
{
    //not sure if the above code will always work (layouts change), but works well for the current API.
    t.printStackTrace();
}
于 2014-03-28T15:38:37.457 回答
0

searchView 不容易定制,但我确实找到了解决方法。我的研究和代码主要取自此处找到的第一个答案:更改 searchview 小部件的背景可绘制对象。在我的 XML 文件中设置背景后,如下所示:

       `<SearchView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:background="@drawable/rounded_grey_search_bar"
        android:clickable="true"
        android:iconifiedByDefault="false"/>`

我将以下代码添加到我的 Java 文件中以更改 SearchView 的填充:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);


    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
    searchView.findViewById(searchPlateId).setBackgroundResource(R.drawable.rounded_grey_search_bar);

    int voiceSearchPlateId = searchView.getContext().getResources().getIdentifier("android:id/submit_area", null, null);
    searchView.findViewById(voiceSearchPlateId).setBackgroundResource(R.drawable.rounded_grey_search_bar);

    int searchTextViewId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    TextView searchTextView = (TextView) searchView.findViewById(searchTextViewId);
    searchTextView.setPadding(20, 20, 20, 20);

设置填充让我可以在我想要的地方获得文本。

于 2016-12-22T16:29:35.377 回答