簡體   English   中英

無法通過編程設置RelativeLayout的布局重力

[英]Can't set layout gravity for RelativeLayout programmatically

嘗試#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);

這就是我得到的結果:

在此處輸入圖片說明

嘗試#2 :我嘗試CENTER_IN_PARENT編程方式設置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);

如何為RelativeLayout設置布局重力CENTER 我需要在不更改FrameLayoutImageView布局參數的情況下為RelativeLayout設置重力。

解決方法是這里,只是驗證了我自己。 按要求工作。 我們缺少的重要部分是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);

MATCH_PARENT而不是WRAP_CONTENT設置為RelativeLayout,例如

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

並將RelativeLayout.LayoutParams設置為您的ImageView

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM