如果我有一个只包含一个布局文件TextView
,我可以毫无问题地从内部充气它activity
.
但是,如果我尝试膨胀一个包含单个自定义视图的类似布局文件,那么我会得到一个通货膨胀例外。
在这种情况下,我可以获得自定义视图来膨胀的唯一方法是将其包装在Layout/ViewGroup
(ie, LinearLayout
).
因此,我想知道编译器是否会自动将内置视图包装在Layout/ViewGroup
(即 LinearLayout)如果检测到
该视图尚未嵌套在一个视图中?
(当我有时间设置模拟器并提取布局树时,我将对此进行测试,然后发布
任何发现。)
感谢您的帮助。
情况1:工作正常
TextViewLayoutFile.axml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
view = infalInflater.Inflate(Resource.Layout.TextViewLayoutFile, null);
情况 2:仅当 MyTextView 包装在布局 (LinearLayout) 中时才有效
2a: Produces inflation exception
----------------------------------------------------------------------------
TextViewLayoutFile.axml
<?xml version="1.0" encoding="utf-8"?>
<AppName.Views.MyTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
view = infalInflater.Inflate(Resource.Layout.TextViewLayoutFile, null);
2b: Inflates ok
----------------------------------------------------------------------------
TextViewLayoutFile.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_android_is"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<AppName.Views.MyTextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
view = infalInflater.Inflate(Resource.Layout.TextViewLayoutFile, null);
where
namespace AppName.Views
{
public class MyTextView : TextView
{
public MyTextView(Context context) : base(context) { }
public MyTextView(Context context, IAttributeSet attributes) : base(context, attributes) { }
}
}