在 Fragment.xml Android 应用程序开发中引用时,自定义视图不会从 XML 扩展

Custom view does not inflate from XML when referenced in Fragment.xml Android Application Development

我在 Android 中创建了一个自定义视图,我们称它为 MyCustomView,它的 XML 文件是 MyCustomView.xml。我在一个片段中引用了 MyCustomView,我们称它为 MyFragment 和 MyFragment.xml。该参考仅是 XML 参考而非代码。当我的片段膨胀时,它使用 MyFragment.xml 膨胀。然后我可以检索指向视图的指针。这是我的问题。一切都按预期工作,除了 MyCustomView 没有从 MyCustomView.xml 膨胀,因此,在屏幕上可以看到 MyCustomView.xml 中定义的 none 按钮或布局。我可能做错了什么?如何使 MyFragment.xml 中的 XML 引用膨胀为 MyCustomView.xml?

MyFragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.domain.MyFragment"
    android:id="@+id/MyFragment">

    <com.domain.MyCustomView
        android:id="@+id/MyCustomView"
        android:background="@android:color/transparent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    </com.domain.MyCustomView>

</FrameLayout>

MyCustomView.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent" 
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_gravity="bottom"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btnCancel"
            android:layout_width="200dp"
            android:layout_height="100dp"
            android:text="Cancel"
            android:layout_weight="1" />

        <Button
            android:id="@+id/btnNext"
            android:layout_width="200dp"
            android:layout_height="100dp"
            android:text="Next"
            android:layout_weight="1" />

    </LinearLayout>

</FrameLayout>

MyFragment.java

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_signature_capture, container, false);

        myCustomView = (MyCustomView) v.findViewById(R.id.signatureView);

        //At this point I would like to be able to 
        //access my buttons declared in MyCustomView.xml 
        //via the following call
       Button b1 = (Button) myCustomView.findViewById(R.id.btnCancel);

       //The above line returns null because it cant find the view. 



        return v ;
    }

如果您已经为其定义了一个源文件 (java),并且该文件是 View class 的子文件,则您只能在 xml 中使用自定义视图或其任何后代。由于您只定义了一个自定义布局,没有构造函数,因此它不能像 View 那样膨胀。你应该改变:

<com.domain.MyCustomView
    android:id="@+id/MyCustomView"
    android:background="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
</com.domain.MyCustomView>

与:

<include
    layout=@layout/MyCustomView
    android:id="@+id/MyCustomView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</include>

然后将此属性移动到您的 MyCustomView.xmlFrameLayout

android:background="@android:color/transparent"