无法通过编程设置RelativeLayout的布局重力

时间:2018-07-30 16:54:53

标签: android android-relativelayout

尝试#1 :我正在尝试以编程方式为RelativeLayout设置布局重力。

    FrameLayout frameLayout = new FrameLayout(this);
    FrameLayout.LayoutParams frameLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    frameLayout.setLayoutParams(frameLayoutParams);
    setViewPaddingInDp(frameLayout, 16, 16, 16, 16);

    RelativeLayout relativeLayout = new RelativeLayout(this);
    LinearLayout.LayoutParams relativeLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    relativeLayoutParams.gravity = Gravity.CENTER;
    relativeLayout.setLayoutParams(relativeLayoutParams);
    frameLayout.addView(relativeLayout);

    ImageView imageView = new ImageView(this);
    setViewWidthAndHeight(imageView, 128, 192);
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setImageResource(R.drawable.maxwell);
    relativeLayout.addView(imageView);

    setContentView(frameLayout);

这就是我得到的结果:

enter image description here

尝试#2 :我已尝试通过编程方式设置CENTER_IN_PARENT,但没有结果

RelativeLayout relativeLayout = new RelativeLayout(this);
        RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        relativeLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        relativeLayout.setLayoutParams(relativeLayoutParams);
        frameLayout.addView(relativeLayout);

尝试#3 :也尝试设置CENTER_HORIZONTAL,但没有效果:

    RelativeLayout relativeLayout = new RelativeLayout(this);
    RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    relativeLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
    // relativeLayoutParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    // relativeLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
    relativeLayout.setLayoutParams(relativeLayoutParams);
    frameLayout.addView(relativeLayout);

如何为CENTER设置布局重力RelativeLayout?我需要为RelativeLayout设置重力,而无需更改FrameLayoutImageView布局参数。

2 个答案:

答案 0 :(得分:0)

这是解决方法,只是验证了我自己。按要求工作。我们缺少的重要部分是imageViewParam.addRule(RelativeLayout.CENTER_HORIZONTAL);

FrameLayout frameLayout = new FrameLayout(this);
FrameLayout.LayoutParams frameLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
frameLayout.setLayoutParams(frameLayoutParams);
//setViewPaddingInDp(frameLayout, 16, 16, 16, 16);

RelativeLayout relativeLayout = new RelativeLayout(this);
RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
relativeLayoutParams.addRule(CENTER_IN_PARENT, TRUE);
relativeLayout.setLayoutParams(relativeLayoutParams);

frameLayout.addView(relativeLayout);

ImageView imageView = new ImageView(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
imageView.setLayoutParams(params);
// params.addRule(RelativeLayout.CENTER_IN_PARENT);
// params.addRule(RelativeLayout.CENTER_VERTICAL);
// setViewWidthAndHeight(imageView, 128, 192); // if you are using this method, then set the layout param accordingly
// imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(R.drawable.maxwell);

relativeLayout.addView(imageView);

setContentView(frameLayout);

答案 1 :(得分:0)

MATCH_PARENT代替WRAP_CONTENT设置为RelativeLayout之类的

RelativeLayout.LayoutParams relativeLayoutParams = new 
RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
ViewGroup.LayoutParams.MATCH_PARENT);

并为您的ImageView设置一个RelativeLayout.LayoutParams

RelativeLayout.LayoutParams layoutParams = 
(RelativeLayout.LayoutParams) imageView.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 
RelativeLayout.TRUE);
imageView.setLayoutParams(layoutParams);