0

不,没有人回答这个问题,问题仍然存在......这里的这个问题是关于同一问题的另一种症状(请参阅下面的评论):


至少在 Monodroid 中,当从布局中扩展自定义视图时,有时需要将其包装在 ViewGroup(即,LinearLayout)中以避免异常,而其他时候则不需要。

我想知道是否有人熟悉这种情况,以及它是否也发生在“原始”Android 中(即没有 Monodroid)?

我总是先尝试不使用,如

文本视图1.axml

<?xml version="1.0" encoding="utf-8"?>
<Monodroid.Activity1.TextView1
  android:id="@+id/text_view1"
  android:layout_width="300dp"
  android:layout_height="50dp"/>

但如果我得到一个通货膨胀例外,那么我将不得不把它包起来

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/ll_container"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

  <Monodroid.Activity1.TextView1
    android:id="@+id/text_view1"
    android:layout_width="300dp"
    android:layout_height="50dp"/>

</LinearLayout>

在哪里

public class TextView1 : TextView
{
    public TextView1 (Context context) : base(context) { }
    public TextView1 (Context context, IAttributeSet attributes) : base(context, attributes) { }
    public TextView1 (Context context, IAttributeSet attributes, int defStyle) : base(context, attributes, defStyle) { }
}

谢谢你。


此布局文件在不包含视图组的情况下膨胀:

<?xml version="1.0" encoding="utf-8"?>
<fieldinspection.droid.views.custom.FieldInput
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/RecordDataFieldInput"
  style="@style/FieldInput"
  android:layout_marginRight="0dip"/>

而这个(内部类PagedFragmentFieldInput)没有(它需要在LinearLayout中,否则通货膨胀异常):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/ll_record_data_field_input2_container"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"  >

  <FieldInspection.Droid.Views.ComplaintView.PagedFragmentRecordDataFieldBox.PagedFragmentFieldInput
    android:id="@+id/RecordDataFieldInput"
    style="@style/FieldInput"
    android:layout_marginRight="0dip"/>

</LinearLayout>

它读作 PagedFragment-RecordDataFieldBox,它是一个位于 ViewPager 内的 Fragment 内的 RecordDataFieldBox。

4

1 回答 1

1

我拿了你的第一个样品并在这里试了一下。包装与否我没有错误。

TextViewInherit.cs:

using Android.Content;
using Android.Util;
using Android.Widget;

namespace InflationShiz
{
    public class TextViewInherit : TextView
    {
        public TextViewInherit(Context context, IAttributeSet attrs) :
            this(context, attrs, 0)
        {
        }

        public TextViewInherit(Context context, IAttributeSet attrs, int defStyle) :
            base(context, attrs, defStyle)
        {
        }
    }
}

一.axml:

<?xml version="1.0" encoding="utf-8"?>
<inflationshiz.TextViewInherit
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

二.axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <inflationshiz.TextViewInherit
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

当我Activity像这样膨胀时,两者都起作用:

var one = LayoutInflater.Inflate(Resource.Layout.One, null);
var two = LayoutInflater.Inflate(Resource.Layout.Two, null);

我发现很难重现您的问题;您的代码分散在 3 个不同的 SO 问题上,甚至更加分散,因为您已经为自己的问题创建了答案,并在其中尝试详细说明您的初始问题。

于 2013-07-02T21:26:47.850 回答