【问题标题】:Is setPadding broken for LinearLayout?LinearLayout 的 setPadding 是否损坏?
【发布时间】:2013-12-02 07:40:15
【问题描述】:

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

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

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

为了简化,我的情况如下:

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 的填充(我尝试动态设置)不会影响它,只有当我直接在其上设置边距时。

任何提示都会非常感谢。

【问题讨论】:

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


    【解决方案1】:

    经过一番挖掘,通过其他 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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2011-01-28
      相关资源
      最近更新 更多