如何修复横向截止的自定义 SearchView 背景?
Posted
技术标签:
【中文标题】如何修复横向截止的自定义 SearchView 背景?【英文标题】:How to fix cut-off custom SearchView background in landscape? 【发布时间】:2013-06-17 02:58:57 【问题描述】:我已经按照这个question 的最佳答案使我的ActionBar 中的SearchView
小部件适合自定义主题。它适用于纵向模式,但在横向模式下,操作系统会缩小 ActionBar 的高度以最大化内容屏幕空间。而不是像其他项目一样将没有边距的 SearchView
小部件安装到 ActionBar 中,而是在顶部被切掉:
我翻遍了 android 源代码的 res 文件夹,但找不到任何专门的布局或资源来说明如何解决此问题,甚至 Android 本身如何设法将默认 Holo SearchView
Widget 放入其中缩小的 ActionBar。
感谢任何见解。谢了。
【问题讨论】:
【参考方案1】:您必须使用较小版本的编辑文本。可绘制对象的固有尺寸小于默认的可编辑文本可绘制对象。
查看这里使用的drawables
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
【讨论】:
终于从我们的积压日志中解决了这个问题。非常感谢您的提示!【参考方案2】:我遇到了类似的问题,只需更改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();
【讨论】:
这似乎也是一种可能的解决方法,但是如果您有时间手动重绘资源,乔纳森的回答是可行的方法。【参考方案3】:searchView 不容易定制,但我确实找到了解决方法。我的研究和代码主要取自这里找到的第一个答案:Changing the background drawable of the searchview widget。像这样在我的 XML 文件中设置背景后:
`<SearchView
android:layout_
android:layout_
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);
设置填充让我可以在我想要的地方获得文本。
【讨论】:
以上是关于如何修复横向截止的自定义 SearchView 背景?的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 SearchView 上的默认图标,以便在 Android 的操作栏中使用?
如何更改SearchView上的默认图标,以便在Android的操作栏中使用?
如何修复我的自定义 conda 包的 conda UnsatisfiableError?
如何从 nib 中修复此“在托管对象上调用选择器 ... 已被 GC'ed”,其中包含未使用的自定义 UITableViewCell?