【问题标题】:Custom view with <merge> and <layout> tags带有 <merge> 和 <layout> 标签的自定义视图
【发布时间】:2016-08-24 09:47:31
【问题描述】:

我尝试将原生 Android Studio 数据绑定功能与自定义布局一起使用。 我的自定义布局如下所示:

public class MainNavigationEntryView extends LinearLayout {

    private MainNavigationEntryBinding layoutBinding;

    public MainNavigationEntryView(Context context) {
        super(context);
        init(context, null);
    }

    [...]

    private void init(Context context, AttributeSet attrs) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutBinding = MainNavigationEntryBinding.inflate(inflater, this, true);
        [...]
    }
}

我的布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageIcon"
            android:layout_width="@dimen/tabbar_icon_size"
            android:layout_height="@dimen/tabbar_icon_size"
            android:layout_marginTop="4dp"
            android:background="@drawable/stateful_background_no_bounds"
            android:gravity="center"
            tools:ignore="contentDescription"/>

        <ImageView
            android:id="@+id/imageIndicator"
            android:layout_width="@dimen/indicator_size_small"
            android:layout_height="@dimen/indicator_size_small"
            android:src="@drawable/background_circle_blue"
            android:visibility="gone"
            tools:visibility="visible"
            tools:ignore="contentDescription"/>

    </LinearLayout>

</layout>

这里的问题是我有两个嵌套的 LinearLayout。我试图通过使用&lt;merge&gt; tag 来减少它,但似乎不可能将&lt;layout&gt;&lt;merge&gt; 标签放在一个布局中。

有没有其他方法可以做到这一点,或者将&lt;layout&gt;&lt;merge&gt; 标签放在一个布局中?

提前致谢。

【问题讨论】:

    标签: android android-layout layout merge


    【解决方案1】:

    我认为您不能将 &lt;layout&gt; 标记与 &lt;merge&gt; 嵌套。

    但是你可以做一件事来避免两个嵌套的 LinearLayout。

    你的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <layout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
    
        <com.example.MyCustomView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical">
    
            <ImageView
                android:id="@+id/imageIcon"
                android:layout_width="@dimen/tabbar_icon_size"
                android:layout_height="@dimen/tabbar_icon_size"
                android:layout_marginTop="4dp"
                android:background="@drawable/stateful_background_no_bounds"
                android:gravity="center"
                tools:ignore="contentDescription"/>
    
            <ImageView
                android:id="@+id/imageIndicator"
                android:layout_width="@dimen/indicator_size_small"
                android:layout_height="@dimen/indicator_size_small"
                android:src="@drawable/background_circle_blue"
                android:visibility="gone"
                tools:visibility="visible"
                tools:ignore="contentDescription"/>
    
        </com.example.MyCustomView>
    </layout>
    

    您的自定义视图:

    public class MyCustomView extends LinearLayout {
    
        private MyCustomViewBinding binding;
    
        public MyCustomView(Context context) {
            super(context);
        }
    
        [...]
    
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
    
            binding = MyCustomViewBinding.bind(this);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多