【问题标题】:VisualStudio 2015 and Xamarin, inflate errorVisualStudio 2015 和 Xamarin,膨胀错误
【发布时间】:2017-04-04 14:17:33
【问题描述】:

我正面临这个(对我而言)奇怪的问题。 在使用 Xamarin Studio 几年后,我选择使用 VisualStudio 2015 的插件。我目前正在从事一个现场维护项目,所以这是我第一次迁移。在解决了 RecyclerView 和 CardView 小部件的一些问题后,我面临着这个新问题,在 Xamarin Studio 中从未见过。 我有一个 ViewHolder 项目的简单布局,它使用选择器作为背景。这是选择器(res/color/item_bg_selector.xml):

<?xml version="1.0" encoding="UTF-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:color="#fffff2e6" />
    <item android:state_selected="true" android:color="#ffabfdc3" />
    <item android:color="@android:color/transparent" />
</selector>

这是项目布局(res/layout/rowSpare.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="2dp"
    android:background="@color/item_bg_selector">
    <TextView
        android:id="@+id/tvSpareCode"
        android:layout_width="0dp"
        android:layout_weight="@integer/spareCode"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    <TextView
        android:id="@+id/tvSpareDescription"
        android:layout_width="0dp"
        android:layout_weight="@integer/spareDescPrice"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    <TextView
        android:id="@+id/tvSparePrice"
        android:layout_width="0dp"
        android:layout_weight="@integer/sparePrice"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textColor="@color/black"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    <TextView
        android:id="@+id/tvSpareQuantity"
        android:layout_width="0dp"
        android:layout_weight="@integer/spareQuant"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textColor="@color/black"
        android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>

这是出现错误的自定义适配器的摘录:

    public class adSpareList : RecyclerView.Adapter
    {
....
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            View itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.rowSpare, parent, false);
            itemView.Clickable = true;
            SpareItemViewHolder vh = new SpareItemViewHolder(itemView, OnClick);

            return (vh);
        }
    }

无论何时执行,OnCreateView 的第一行都会出现此错误:

Unhandled Exception
Android.Views.InflateException: Bonary XML file line #1: Error inflating class <unknown>.

没有其他信息。相同的布局在 Xamarin Studio 上运行良好。如果我删除 android:background="@color/item_bg_selector",或者我用一个简单的 android:background="@android:color/transparent" 代替它,那么整个事情就可以正常工作,但这不是我之前取得的结果。 任何帮助将不胜感激。

鲁道夫。

【问题讨论】:

  • 你把选择器放在哪里了?如果在drawable文件夹下,或许你可以试试@drawable/item_bg_selector

标签: android visual-studio xamarin xamarin.android


【解决方案1】:

我不知道它在 Xamarin 中是如何工作的,同样的事情在 Visual Studio 中也不起作用,但无论如何您正在使用颜色状态列表,但颜色状态列表不能用作背景。您必须为背景创建可绘制的状态列表。所以把你的代码改成这样:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true">
     <shape android:shape="rectangle">
        <solid android:color="#fffff2e6" /> 
    </shape>
</item>
<item android:state_selected="true">
    <shape android:shape="rectangle">
        <solid android:color="#ffabfdc3" /> 
    </shape>
     </item>
  <item android:color="@android:color/transparent" />
 </selector>

参考开发者页面:https://developer.android.com/guide/topics/resources/color-list-resource.html

以及类似的发布问题:How to set custom button state background color?

【讨论】:

  • 你是对的。实际上,在 Xamarin Studio 下,xml 是一个可绘制列表(每个可绘制对象都是一种简单的颜色);也许它不适用于简单的颜色,因为它是 LinearLayout 背景。无论如何,我必须使用“@android:color/transparent”删除默认项目,就好像我离开它一样,我得到了同样的错误。谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多