android 动态设置margin,Android 动态设置padding跟margin的问题

最近要做到动态设置padding跟margin,设置它们四个参数都是int类型。比如这里设置了10,,可是这个数又是代表什么意思呢?一直很好奇它们的单位问题,所以这就造成了,在不同手机上的适配问题。有些间距大了,有些小了,表示很困惑,下面就来分析一下问题。

一、使用方式

1、padding

view.setPadding(int left, int top, int right, int bottom);

2、margin

LayoutParams lp = (LayoutParams) view.getLayoutParams();

lp.setMargins(int left, int top, int right, int bottom);

3、举个例子

如果是margin的话,要注意view.getLayoutParams()是需要强制转换的,个人觉得是要看view的父元素是什么容器。

例如上面要对tv进行设置的话,应该是这样:

LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tv.getLayoutParams();

lp.setMargins(int left, int top, int right, int bottom)

如果tv外面是RelativeLayout,那相应的(RelativeLayout.LayoutParams) tv.getLayoutParams();

二、单位问题

1、padding

我们可以定位到setPadding所在的View.class可以看到上面单位的描述,这里就看看paddingLeft,其他三个方向同理

/**

* The left padding in pixels, that is the distance in pixels between the

* left edge of this view and the left edge of its content.

* {@hide}

*/

@ViewDebug.ExportedProperty(category = "padding")

protected int mPaddingLeft = 0;

看到源码中的注解pixels?这里表示的就是单位为px

2、margin

其实跟padding差不多,不过就是setMargin是在ViewGroup.class中,但是不一样的是,setMargin是属于MarginLayoutParams.class内部类的。所以我们定位到这个内部类看下leftMargin,其他三个方向同理

/**

* The left margin in pixels of the child. Margin values should be positive.

* Call {@link ViewGroup#setLayoutParams(LayoutParams)} after reassigning a new value

* to this field.

*/

@ViewDebug.ExportedProperty(category = "layout")

public int leftMargin;

看到源码中的注解pixels?这里表示的也是单位为px

三、处理适配

如果我们直接在代码中设置两者的话,估计就是px单位了,说实话确实没错。不过去到其他分辨率的手机估计就变形了。这是为什么呢?你想想我们在布局中设置两者的时候是dip单位,在其他分辨率却没有问题,那你估计就发现了问题了。

是的,你想的没错。一般设置dip单位的话,是比较好适配的。

如果你不行的话,可以在布局中设置为px去不同分辨率手机试试看,完全变形。

px设置布局当初是我做项目的一个大坑。当我开发测试的时候很舒服, 没问题。可是到了项目快完成的时候,去了其他分辨率的试了下,变形了,内心千万个草泥马在奔腾。

说了这么多,就来说说怎么适配。其实很简单就是你在设置的时候dip转换为px.

/**

* dp转px

*

* @param context

* @param dpVal

* @return

*/

public static int dp2px(Context context, float dpVal) {

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,

dpVal, context.getResources().getDisplayMetrics());

}

四、用法

setPadding(int left, int top, int right, int bottom);这里我们就当成left要设置的dp2px(context,dpval),margin也是同样的意思,最好都是设置dp转px。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值