是否为LinearLayout打破了setPadding?

时间:2013-11-18 23:08:18

标签: android xml android-linearlayout scale android-image

我的问题非常短暂。我有一个基于LinearLayout的自定义控件。我从xml'膨胀它的视图,其中根被设置为元素。

现在,当我尝试通过“this.setPadding(x,x,x,x)”设置此自定义控件的填充时,它不会影响我稍后在几行代码中添加到此控件的TextView和ImageView

目前我正在通过单独设置每个控件的边距来实现它,以实现整个自定义控件的全局填充,但是知道是否有使用setPadding dynamicaly或者可能是错误的问题会很好是我的。

为简化起见,我的案例如下:

  

setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
  LinearLayout.LayoutParams lp = new   的LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,   ViewGroup.LayoutParams.MATCH_PARENT); setLayoutParams(LP);

     

setPadding(0,30,0,30); //我知道它在px

之后我正在添加一个大图像,由于它的大小而缩小,但是LinearLayout(我尝试设置dynamicaly)的填充不会影响它,只有当我直接在它上面设置边距时。

任何提示都会受到极大关注。

1 个答案:

答案 0 :(得分:5)

经过一番挖掘后,通过其他StackOverflow问题找到答案: https://stackoverflow.com/a/13363318/905938

基本上,如果一个人使用选择器xml设置后台资源(如我的情况),它将完全覆盖先前的填充设置。因此,我在自定义控件初始化中设置的填充在设置后立即丢失。

现在我知道了这个问题,我基本上只是在我的自定义控件中拦截对此方法的调用:

@Override
public void setBackgroundResource(int resid)
{
    int paddingLeft, paddingTop, paddingRight, paddingBottom;
    paddingLeft = getPaddingLeft();
    paddingTop = getPaddingTop();
    paddingRight = getPaddingRight();
    paddingBottom = getPaddingBottom();

    super.setBackgroundResource(resid);

    setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
}

这解决了这个问题,我希望能为任何会发现类似问题的人解决问题。