其他分享
首页 > 其他分享> > android-创建在xml属性中接受其他布局的自定义视图

android-创建在xml属性中接受其他布局的自定义视图

作者:互联网

我正在尝试解决的问题是open question,我可能已经找到了一种可能的解决方案,该解决方案不易出错.但是,我不知道如何编写解决方案.

该解决方案与android.support.design.widget.NavigationView如何以XML处理标头视图非常相似!唯一的问题是我尝试搜索NavigationView的源代码,但似乎找不到它.我可以轻松找到其他Android源代码-更新的设计库除外.

如果可以从Google找到源代码,那么可以实现类似的功能.

<android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/drawer"
        app:headerLayout="@layout/drawer_header"  />

看到最后一行吗?我希望能够对自己的customView执行类似的操作以在其中插入另一个视图.

所以我的问题是:

>设计库NavigationView的源代码在哪里?

要么
>是否有另一个自定义视图,允许您在其中已在线发布代码的布局中插入?

要么
>如果没有任何在线内容,那么一个人该怎么做呢?有可能的. NavigationView做到了.

解决方法:

这是一个示例,您可以如何做:
在您的resources.xml中:

<declare-styleable name="MyCustomView">
   <attr name="child_view" format="reference" />
</declare-styleable>

在您的MyCustomView.java中:

public class MyCustomView extends ViewGroup {

    public MyCustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyCustomView, 0, 0);

        int childView = a.getResourceId(R.styleable.MyCustomView_child_view, R.layout.default_child_view);
        a.recycle();

        LayoutInflater.from(context).inflate(childView, this, true);
    }
}

在您的布局文件中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:custom_view="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

<your.package.MyCustomView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        custom_view:child_view="@layout/some_layout" />

</LinearLayout>

标签:android-layout,android-custom-view,view,android
来源: https://codeday.me/bug/20191028/1949725.html