使用';绑定&x27;和';app&x27;使用Android DB设置自定义属性的名称空间?

使用';绑定&x27;和';app&x27;使用Android DB设置自定义属性的名称空间?,android,xml,android-layout,kotlin,android-databinding,Android,Xml,Android Layout,Kotlin,Android Databinding,考虑以下代码: 绑定适配器: @BindingAdapter("visibility") fun setVisibility(view: View, shouldBeVisible: Boolean) { view.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE } 像这样使用绑定命名空间有什么区别: <TextView android:id="@+id/text_view"

考虑以下代码:

绑定适配器:

@BindingAdapter("visibility")
fun setVisibility(view: View, shouldBeVisible: Boolean) {
    view.visibility = if (shouldBeVisible) View.VISIBLE else View.GONE
}
像这样使用绑定命名空间有什么区别:

<TextView
        android:id="@+id/text_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        bind:visibility="@{mainViewModel.showTextView}"/>

并像这样使用应用程序名称空间:

<TextView
    android:id="@+id/text_view"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:visibility="@{mainViewModel.showTextView}"/>

它们都在我的代码中工作。

应用程序名称空间

应用程序名称空间并非特定于库,但它用于应用程序中定义的所有属性,无论是由代码还是由导入的库定义,有效地为自定义属性(即android系统未定义的属性)创建一个全局名称空间

在这种情况下,appcompat-v7库使用镜像android:namespace的自定义属性来支持android的早期版本(例如:android:showAsAction仅在API11中添加,但app:showAsAction(作为应用程序的一部分提供)可在应用程序的所有API级别上运行)-显然,在未定义该属性的API级别上,使用android:showAsAction是行不通的

  • 束缚
  • 绑定用于android数据绑定中的自定义setter。详情请参阅下文

    您只需使用BindingAdapter注释对静态方法进行注释。此注释将字符串作为参数。字符串是自定义属性,此静态方法将绑定到。避免在注释参数中添加名称空间,因为这会使绑定变得脆弱。方法的第一个参数是要创建的视图对象 将函数应用于,第二个参数是从布局XML检索的值

    @BindingAdapter("progressColor")
    public static void setProgressBarColor(ProgressBar loader, int color) {
      if (loader != null) {
        loader.getIndeterminateDrawable()
          .setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_IN);
      }
    }
    
    更多细节

    <ProgressBar
      style="?android:attr/progressBarStyleLarge"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:indeterminate="true"
      bind:progressColor="@{@android:color/holo_green_dark}"
    />
    
    
    
    有关绑定适配器检查的详细信息如下:

    它们完全相同,您只是在XML文件中给了它们不同的名称。您的
    bind
    命名空间可能如下所示:

    xmlns:bind=”http://schemas.android.com/apk/res-auto“


    您也可以将其称为
    bla
    任何内容。使用
    bind
    只会让你更清楚它的作用。

    可能会有帮助。没有区别,如果你想要
    app
    bind
    或使用任何单词,这是你的选择。现在它不允许我再这样做了