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级别更改为更高级别不会出现渲染错误。
它将解决渲染问题
我们刚刚将本地 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级别更改为更高级别不会出现渲染错误。
它将解决渲染问题