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

时间:2011-02-06 14:59:47

标签: android

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

6 个答案:

答案 0 :(得分:126)

您可以使用DisplayMetrics并确定屏幕密度。像这样:

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

我记得最好使用地板进行偏移和舍入宽度。

答案 1 :(得分:16)

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

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

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <dimen name="my_margin">5dip</dimen>
</resources>

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

int myMarginPx = Resources.GetDimensionPixelSize(Resource.Dimension.my_margin);

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

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
layoutParams.SetMargins(myMarginPx, myMarginPx, myMarginPx, myMarginPx);

答案 2 :(得分:9)

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

Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, r.getDisplayMetrics());

答案 3 :(得分:3)

以下方法可用于将像素转换为dp:

int pixelToDP(int pixel) {
    final float scale = RaditazApplication.getInstance().getResources().getDisplayMetrics().density;
    return (int) ((pixel * scale) + 0.5f);
}

答案 4 :(得分:1)

将DP转换为像素值

int Whatever_valueInDP=10;//value in dp
int Value_In_Pixel= (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP, Whatever_valueInDP, getResources()
                    .getDisplayMetrics());

答案 5 :(得分:0)

对于Kotlin家伙,我得到了方便的帮手乐趣,它非常有用:)

fun setMarginsInDp(v: View, l: Int, t: Int, r: Int, b: Int) {
    if (v.layoutParams is ViewGroup.MarginLayoutParams){
        val screenDensity: Float = v.context.resources.displayMetrics.density
        val params: ViewGroup.MarginLayoutParams = v.layoutParams as ViewGroup.MarginLayoutParams
        params.setMargins(l*screenDensity.toInt(), t*screenDensity.toInt(), r*screenDensity.toInt(), b*screenDensity.toInt())
        v.requestLayout()
    }
}

只需通过一个有效的视图即可完成所有设置!