您可以在 XML 布局文件中将视图设置为另一个视图的 属性 吗?

Can you set a view as a property of another view in an XML layout file?

我们有一个自定义 GridView,它具有 headerViewfooterView 属性。我想知道在 Android 中是否可以从布局文件中设置这些属性。

XAML in Windows 让您可以轻松地做到这一点,因为您可以通过属性(对于字符串、数字或其他简单类型)或通过嵌套元素(对于任何对象)指定属性type) 使用 ControlType:PropertyName 语法。

如果 Android 支持类似的东西,这是一个伪版本:

<MyCustomGrid
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- This would set the 'headerView' property
         on 'MyCustomGrid' to a TextView -->
    <MyCustomGrid:headerView>

        <TextView android:text="I'm the Header TextView" />

    </MyCustomGrid:headerView>

</MyCustomGrid>

显然以上是无效的。但是是否可以在 Android 中做类似的事情,或者我必须在 Activity/Fragment 的代码隐藏中做这件事?

是的,你可以。

您可以通过扩展 GridView class 创建一个 Custom View 并通过属性添加一些逻辑。这不会作为来自 XAML 的附加 属性(例如来自 XAML UWP 的 Grid.Column 或 Grid.Row)但你可以这样做:

<com.teste.widget.MarqueIVGridView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:my_header="@layout/my_header"
/>

不要忘记在布局的根部添加命名空间:

xmlns:app="http://schemas.android.com/apk/res-auto"

Google 有这个样本: HeaderGridView

它使用不同的方法,如果你复制这个 class 你将只需要使用这个 "HeaderGridView" 并从它调用 addHeaderView 方法发送你的 header 视图膨胀。

欢迎提出任何问题,很高兴为您解答。