Android - 获取按钮的边框宽度

Posted

技术标签:

【中文标题】Android - 获取按钮的边框宽度【英文标题】:Android - Get button's border width 【发布时间】:2013-05-31 05:02:23 【问题描述】:

如何以编程方式获取站立式 android 按钮的边框宽度?我只需要调整文本大小以适应灰色区域,但如果不知道边框的大小,我就无法做到这一点。谢谢http://s4.postimg.org/9w7idof4d/screenshot_Border_Width.png

【问题讨论】:

您是否尝试使用填充?有人这样想:link 我将填充设置为 0。另外,我想完全避免使用 XML,因为我什至不知道从哪里开始使 XML 动态工作。 尝试使用 setPadding 方法更改代码中的值。 setPadding 我已经这样做了。 cmdVi​​ew.setPadding(0, 0, 0, 0);那是行不通的。 如果我可以将其设置为正确的大小,文本将正确匹配。我只需要找到不包括边框的实际按钮的宽度,并将其传递给我的 SetTextSize 函数。 【参考方案1】:

ShapeDrawable bgShape = (ShapeDrawable)b​​tnbck.getBackground();

    Rect padding = null;
    bgShape.getPadding(padding );

按钮的图像只是一个可绘制的对象。所以你必须得到它的价值。无论如何,它可以随心所欲地制作任何形状。

【讨论】:

这行不通。这行代码:ShapeDrawable bgShape = (ShapeDrawable) cmdVi​​ew.getBackground();阻止我的程序运行 我改变了 Rect padding = null;到 Rect 填充 = new Rect();和 ShapeDrawable 到 Drawable 并且我的程序不再崩溃,但是返回的填充完全是错误的值。我在某处读到标准按钮使用 NinePatchDrawable 图像。我认为这就是问题所在。我发现没有办法将背景作为 NinePatchDrawable【参考方案2】:

我终于找到了解决办法。微调器的默认填充恰好与按钮的边框相同。

int paddingLeft = mySpinner.getPaddingLeft();

希望它在所有设备上都是一样的。

编辑:并非所有设备都相同。我仍然没有有效的解决方案

【讨论】:

【参考方案3】:

获取按钮边框的宽度和高度:

final Button button = new Button(this);
params = new RelativeLayout.LayoutParams(50, 50);
layout.addView(button, params);
button.post(new Runnable()

    @Override
    public void run()
    
         button.buildDrawingCache();
         Bitmap viewCopy = button.getDrawingCache();

         boolean stillBorder = true;
         PaddingLeft = 0;
         PaddingTop = 0;
         while (stillBorder)
         
             int color = viewCopy.getPixel(PaddingLeft, button.getHeight() / 2);
             if (color != Color.TRANSPARENT)
                 stillBorder = false;
             else
             PaddingLeft++;
                       
         stillBorder = true;
         while (stillBorder)
         
             int color = viewCopy.getPixel(button.getWidth() / 2, PaddingTop);
             if (color != Color.TRANSPARENT)
                 stillBorder = false;
             else
                 PaddingTop++;
         
     
);

【讨论】:

以上是关于Android - 获取按钮的边框宽度的主要内容,如果未能解决你的问题,请参考以下文章

Android动态生成按钮样式

android 为啥没有边框

Android - 获取设置为 wrap_content 的按钮的宽度

如何以编程方式在 Android 中获取图像按钮的宽度和高度

如何获取 android studio 组件(按钮、文本等)大小(宽度、高度或默认大小)

Android浏览器中的错误边框宽度