Android SDK 22 - SearchView 渲染问题

Android SDK 22 - SearchView rendering problems

我们刚刚将本地 Android SDK 更新为新的 version 22, and we are trying to update also our apps, but it seems to be a problem with SearchView 在布局设计视图中呈现Android Studio:每次设计器尝试呈现 SearchView 元素时,都会抛出异常:

java.lang.NullPointerException   at android.content.res.TypedArray.hasValueOrEmpty(TypedArray.java:845)   at android.widget.SearchView.(SearchView.java:295)   at android.widget.SearchView.(SearchView.java:258)   at android.widget.SearchView.(SearchView.java:254)   at java.lang.reflect.Constructor.newInstance(Constructor.java:422)   at android.view.LayoutInflater.createView(LayoutInflater.java:607)   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)   at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806)   at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)   at android.view.LayoutInflater.rInflate(LayoutInflater.java:782)   at android.view.LayoutInflater.inflate(LayoutInflater.java:504)   at android.view.LayoutInflater.inflate(LayoutInflater.java:385)

即使我们在新布局文件中从左侧工具栏创建新元素,也会发生这种情况。 有什么想法吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <SearchView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/searchView" />
</LinearLayout>

source 中找到了这个。评估失败的是 a 的取消引用。

    final TypedArray a = context.obtainStyledAttributes(
            attrs, R.styleable.SearchView, defStyleAttr, defStyleRes);

    [...]

    // Prior to L MR1, the search hint icon defaulted to searchIcon. If the
    // style does not have an explicit value set, fall back to that.
    if (a.hasValueOrEmpty(R.styleable.SearchView_searchHintIcon)) {
        mSearchHintIcon = a.getDrawable(R.styleable.SearchView_searchHintIcon);
    } else {
        mSearchHintIcon = a.getDrawable(R.styleable.SearchView_searchIcon);
    }

尝试设置样式属性?

我对 Davide 的评论投了赞成票。错误意味着 searchIcon 不能为 null(为什么?)。

这可以在 Studio 中使用 api 22 进行编译,但会强制您 select 一个图标。该示例是 android 的 2 个默认值之一(none 与 searchview 默认值一样酷),您始终可以拥有自定义的...

这里是片段。

        <SearchView
        android:id="@+id/searchBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:searchIcon="@android:drawable/ic_search_category_default"
        tools:ignore="UnusedAttribute" />

编辑

根据您的清单,将设计器预览中的 android 版本更改为当前版本。渲染问题导致您的设计器预览使用比当前 android API 级别更高的 API 级别。


它应该有效

只需将 api 22 更改为 android xml 布局中的 21

尝试将API级别更改为更高级别不会出现渲染错误。

它将解决渲染问题