Android动态地将margine设置为root相对布局

时间:2016-10-16 19:37:49

标签: android android-layout android-relativelayout layoutparams

您好我正在开发Android应用程序。我以编程方式创建视图。在我的布局中,我将相对布局作为根元素。我试图将margin设置为我的根相对布局。但我无法做到这一点。我试着这样做:

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RelativeLayout relativeLayout = new RelativeLayout(this);
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT);

        rlp.setMargins(100,100,100,100);
        relativeLayout.setLayoutParams(rlp);
        relativeLayout.setBackgroundColor(getResources().getColor(R.color.colorAccent3));

        setContentView(relativeLayout);
    }
}

上面的代码为我的活动添加了相对布局。但不考虑利润率。需要一些帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

它不会像你尝试的那样工作,因为这就是框架的工作方式。根视图总是占用整个空间,没有边距。

你能做的是:

  • 使用填充代替(如果您的布局允许)
  • 创建一个FrameLayout,创建RelativeLayout,创建一个FrameLayout.LayoutParams,在布局参数上设置边距,将布局参数设置为RelativeLayout,将RelativeLayout添加到FrameLayout并添加setContentView(frameLayout)

答案 1 :(得分:0)

LayoutParams应该适用于不是父母本身的孩子。 Activity的根视图不是RelativeLayout。首先,如果你打印出findViewById(android.R.id.content).getClass().getName(),你会发现根视图是android.support.v7.widget.ContentFrameLayout,我认为(来自名称)是支持-v7上的FrameLayoutAppcompatActivity })。如果你看{4},你会发现它确实是FrameLayout。我的想法是,我们应该尽量给我们的RelativeLayout FrameLayout.LayoutParams

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT,      
        LayoutParams.WRAP_CONTENT
);
params.setMargins(left, top, right, bottom);
relativeLayout.setLayoutParams(params);