Android SDK 22 - SearchView渲染问题

时间:2015-03-12 09:27:10

标签: android android-layout android-studio searchview

我们刚刚将本地 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)

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

Rendering error

<?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>

4 个答案:

答案 0 :(得分:13)

修改

根据您的Manifest,将设计器预览版的Android版本更改为当前版本。渲染问题导致您的设计器预览使用的API级别高于当前的Android API级别。

应该有效

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

enter image description here

答案 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级别更改为更高不会出现渲染错误。

enter image description here

它将解决渲染问题