膨胀自定义视图 - 布局文件不一致

时间:2013-06-30 20:07:02

标签: android xamarin.android android-inflate

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


至少在Monodroid中,当从布局中膨胀自定义视图时,有时需要将其包装在ViewGroup(即LinearLayout)中以便不会出现异常,有时则不会。

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

我总是先尝试不用,如

TextView1.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) { }
}

谢谢。


此布局文件膨胀时不包含viewgroup:

<?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中的片段内的RecordDataFieldBox。

1 个答案:

答案 0 :(得分: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)
        {
        }
    }
}

<强> One.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" />

<强> Two.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问题中,甚至更加分散,因为您已经创建了自己问题的答案,并在此处尝试详细说明您的初始问题。

相关问题