LinearLayout的边距,以编程方式使用dp

Eur*_*nes 50 android

是否可以通过编程方式设置LinearLayout的边距,但不能设置像素,但dp?

Rom*_*zur 131

您可以使用DisplayMetrics并确定屏幕密度.像这样的东西:

int dpValue = 5; // margin in dips
float d = context.getResources().getDisplayMetrics().density;
int margin = (int)(dpValue * d); // margin in pixels
Run Code Online (Sandbox Code Playgroud)

我记得最好使用地板进行偏移和圆角宽度.

  • 伟大的片段.真. (3认同)

小智 17

我有同样的问题,并使用这种技术来解决它:

首先,我将一个xml文件添加到名为dimensions.xml的res/values文件夹中.它看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <dimen name="my_margin">5dip</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)

其次,在我的代码中,我得到了相当于该边距的像素如下(注意我使用Xamarin所以这是C#代码,但纯Java版本应该非常相似):

int myMarginPx = Resources.GetDimensionPixelSize(Resource.Dimension.my_margin);
Run Code Online (Sandbox Code Playgroud)

最后,我创建了我的布局参数:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
layoutParams.SetMargins(myMarginPx, myMarginPx, myMarginPx, myMarginPx);
Run Code Online (Sandbox Code Playgroud)


ale*_*exn 9

您可以将dp转换为px,例如将5dp转换为px:

Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)