在服务中膨胀视图时膨胀异常,而它在活动中正常膨胀

Posted

技术标签:

【中文标题】在服务中膨胀视图时膨胀异常,而它在活动中正常膨胀【英文标题】:Inflating Exception when inflating view in Service while it's inflating normally in activity 【发布时间】:2018-05-12 16:57:24 【问题描述】:

当尝试像这样膨胀View 时:

val lay: LayoutInflater = getSystemService(LAYOUT_INFLATER_SERVICE) as (LayoutInflater)
mView = lay.inflate(R.layout.dialog_new_order, null)

我看到了一个膨胀的异常:

二进制 XML 文件第 0 行:无法解析索引 1 处的属性: TypedValuet=0x2/d=0x7f030006 a=-1

但是当在活动中编写相同的行时,它可以正常工作!

查看 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:background="@color/white"
    android:layout_margin="10dp"
    android:orientation="vertical">

    <TextView
        android:layout_
        android:layout_
        android:background="@color/colorPrimary"
        android:drawableStart="@mipmap/ic_launcher"
        android:gravity="center_vertical"
        android:drawablePadding="20dp"
        android:text="@string/new_order"
        android:textColor="@color/white"
        android:textSize="@dimen/text_size_large" />

    <ImageView
        android:id="@+id/order_image"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp" />

    <TextView
        android:id="@+id/order_rest_name"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:textColor="@color/black"
        android:textSize="@dimen/text_size_xlarge" />

    <TextView
        android:id="@+id/order_customer_info"
        android:layout_
        android:layout_
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:textColor="@color/black"
        android:textSize="@dimen/text_size_normal" />

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_marginBottom="20dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/bg_btns_border"
        android:orientation="horizontal"
        android:weightSum="1">

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_weight="0.5"
            android:padding="10dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/order_price"
                android:layout_
                android:layout_
                android:textColor="@color/black"
                android:gravity="center"
                android:textSize="@dimen/text_size_large" />

            <TextView
                android:id="@+id/order_pay_method"
                android:layout_
                android:layout_
                android:textColor="@color/black"
                android:gravity="center" />


        </LinearLayout>

        <View
            android:layout_
            android:layout_
            android:background="@color/gray_lite" />

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_weight="0.5"
            android:padding="10dp"

            android:orientation="vertical">

            <TextView
                android:id="@+id/order_delivery_time"
                android:layout_
                android:layout_
                android:gravity="center"
                android:text="0 Min"
                android:singleLine="true"
                android:ellipsize="end"
                android:textColor="@color/black"
                android:textSize="@dimen/text_size_large" />

            <TextView
                android:layout_
                android:layout_
                android:gravity="center"
                android:textColor="@color/black"
                android:text="@string/to_restaurant" />
        </LinearLayout>
    </LinearLayout>

    <Button
        android:id="@+id/order_accept_btn"
        android:layout_
        android:layout_
        android:layout_margin="10dp"
        android:background="@drawable/bg_btns_rounded_green"
        android:text="@string/order_status_start_pickup"
        android:textAllCaps="true"
        android:textSize="@dimen/text_size_large"
        android:textColor="@color/white" />

</LinearLayout>

【问题讨论】:

服务是一个没有 UI 的活动。你想在这里完成什么?您希望从服务中扩展的布局做什么? 【参考方案1】:

按照 Alessio 的说法,这是正确的 Service 没有 UI,因此如果您想显示服务中的 Activity 视图,则不能在其上使用 inflater,然后传递您的 Activity Context 和 Show View

LayoutInflater lay=(LayoutInflater)Context.getSystemService(LAYOUT_INFLATER_SERVICE)

mView = lay.inflate(R.layout.dialog_new_order, null)

【讨论】:

以上是关于在服务中膨胀视图时膨胀异常,而它在活动中正常膨胀的主要内容,如果未能解决你的问题,请参考以下文章

回收视图膨胀不同的行:- 绑定数据时出现异常

Android Studio:膨胀类片段时出错

InvocationTargetException 在适配器类中膨胀视图

膨胀内部类视图时出错

在Fabric中膨胀类TextView时出错

Android - 膨胀文本视图时出错