【问题标题】:margin or padding not working using <merge tag android使用 <merge tag android 边距或填充不起作用
【发布时间】:2017-08-11 11:26:17
【问题描述】:

我在自定义视图中使用合并标记并尝试在父视图上设置 layout_marginTop 或 paddingTop,但不起作用。这是我的代码 文件名:my_view.xml

<merge
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android_layout_marginTop="17dp" >  // This margin is lost!
    // content here  ...
</merge>

所以在我的自定义视图文件 MyView.java 中,我只是扩充了这个 my_view.xml。但是 android_layout_marginTop 信息丢失了。

public class MyView {
    private void initViews() {
        View view = LayoutInflator.from(context).inflate(R.layout.my_view, this);
        // get rest views
    }
}

我尝试使用 LayoutParams 在代码中设置边距和填充,但仍然无法正常工作。 非常感谢您的帮助!

【问题讨论】:

    标签: android xml


    【解决方案1】:

    &lt;merge&gt; 标记不是 View,因此尝试在其上设置边距是行不通的。

    看起来您正在遵循“复合控制”模式,您可以在其中创建一些常见的ViewGroup(可能是LinearLayout)的子类,然后将其他一些标准Views 膨胀到其中。如果是这样的话……

    &lt;merge&gt; 标记中删除所有layout_ 属性,并将它们放在自定义视图的标记上,无论您在屏幕布局中使用它的任何位置。像这样的:

    <com.example.stackoverflow.MyView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="17dp"
        ...
        />
    

    【讨论】:

    • 嗨 Ben,我在哪里可以阅读有关“复合控制”模式的更多信息?
    • @PetarMarijanovic 查看 developer.android.com/guide/topics/ui/custom-components.html
    猜你喜欢
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2015-12-02
    • 1970-01-01
    • 2021-01-01
    • 2019-01-06
    • 2019-12-06
    相关资源
    最近更新 更多