RelativeLayout 以编程方式边距不起作用

RelativeLayout programmatically margins not working

    LinearLayout usersPlaceholder = Main.lay_found_users;   //Found Users Placeholder

    //RelativeLayout Params
    RelativeLayout userlay = new RelativeLayout(mCtx);      //Create new Element
    userlay.setBackgroundResource(R.drawable.btn_useritem); //Background
    userlay.setGravity(RelativeLayout.CENTER_HORIZONTAL);   //Gravity
    userlay.setClickable(true);                             //Clickable

    RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, dp(80));
    relativeParams.setMargins(dp(80), dp(80), dp(80), dp(80));
    userlay.setLayoutParams(relativeParams);
    userlay.requestLayout();
    usersPlaceholder.addView(userlay);

边距未设置。作为子元素的 RelativeLayout 正在扩展,直到匹配父元素 usersPlaceholder,即 LinearLayout。我也尝试为父元素设置填充,但同样的问题...

此方法转换度量值

    public int dp(int dps){
    final float scale = mCtx.getResources().getDisplayMetrics().density;
    return (int) (dps * scale + 0.5f);
}

主要Activity:

public class Main extends Activity{

   Context ctx;
   public static LinearLayout lay_found_users;

   @Override
   protected void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.act_main);

      lay_found_users = (LinearLayout) findViewById(R.id.lay_found_users);
   }
}

建议?谢谢。

我找到了解决办法,但我不明白。我使边距起作用,以这种方式从 LinearLayout 创建 LayoutParams

LinearLayout.LayoutParams relativeParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, dp(80));

我不明白,因为我创建了一个新的 RelativeLayout:

RelativeLayout userlay = new RelativeLayout(mCtx);

我正在将 LinearLayout 参数应用于 RelativeLayout

布局类型不匹配,但参数有效。有人能告诉我为什么吗?谢谢。

LinearLayout.LayoutParamsRelativeLayout.LayoutParams 都扩展了 MarginLayoutParams,这解释了为什么某些设置适用于这两种布局。如果您设置的参数在布局中不可用,则会被忽略。

当使用 RelativeLayout 时,我会使用 padding 而不是 margins。它可能会解决您的问题。

Padding 直接在视图上设置,而不是在 LayoutParams 上设置。例如:userLay.setPadding(dp(80),dp(80),dp(80),dp(80));