我们刚刚将本地 Android SDK 更新为新的 version 22 ,我们正在尝试更新我们的应用,但这似乎是一个问题在 Android Studio 的布局设计视图中使用 SearchView 渲染:每次设计师尝试渲染 SearchView 元素时,都会抛出异常:
java.lang.NullPointerException at android.content.res.TypedArray.hasValueOrEmpty(TypedArray.java:845) 在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) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:782) 在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>
答案 0 :(得分:13)
根据您的Manifest,将设计器预览版的Android版本更改为当前版本。渲染问题导致您的设计器预览使用的API级别高于当前的Android API级别。
应该有效
只需在android xml布局中将api 22更改为21
答案 1 :(得分:2)
我投票支持戴维德的评论。错误意味着searchIcon不能为空(为什么?)。
这适用于在带有api 22的Studio中编译,但强制您选择一个图标。这个例子是android的2个默认值之一(没有像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" />
答案 2 :(得分:1)
在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);
}
尝试设置样式属性?
答案 3 :(得分:-1)
尝试将 API级别更改为更高不会出现渲染错误。
它将解决渲染问题