使用<merge标签android无法使用margin或padding

Che*_*eng 4 xml android

我在自定义视图中使用合并标记,并尝试在父视图上设置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>
Run Code Online (Sandbox Code Playgroud)

所以在我的自定义视图文件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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Ben*_* P. 8

<merge>标签是不是一个View,所以尝试设置边距上是行不通的.

看起来你正在遵循"复合控制"模式,你可以在其中创建一些常见的子类ViewGroup(a LinearLayout,或许),然后将其他一些标准View扩展到其中.如果是这样的话......

layout_<merge>标记中删除所有属性,而不是将它们放在自定义视图的标记上,无论您在屏幕的布局中使用它.像这样的东西:

<com.example.stackoverflow.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="17dp"
    ...
    />
Run Code Online (Sandbox Code Playgroud)

  • @PetarMarijanovic 查看developer.android.com/guide/topics/ui/custom-components.html (3认同)