【问题标题】:Android Button Height (programmatically)Android 按钮高度(以编程方式)
【发布时间】:2014-08-05 03:43:38
【问题描述】:

如何将按钮高度设置为小于 30px?我尝试了下一个:



  1. 设置高度(30); (第 150 集有效,但第 30 集无效)
  2. setPadding(0,-20,0,-20); (宽度变化,高度不变)
  3. LinearLayout.LayoutParams(设置 150 有效,但设置 30 无效)
  4. new Button(this, null, android.R.attr.buttonStyleSmall); - 仅对按钮文本有影响


Button mainButton = new Button(this);
mainButton.setPadding(0, 0, 0, 0);
mainButton.setLayoutParams(new LayoutParams(FlowLayout.LayoutParams.WRAP_CONTENT,FlowLayout.LayoutParams.WRAP_CONTENT));
l.addView(mainButton);


SmallButton mainButton = new SmallButton(this);
        mainButton.setText(s);
        mainButton.setBackgroundResource(R.drawable.button_drawable);
        mainButton.setLayoutParams(new LayoutParams(FlowLayout.LayoutParams.WRAP_CONTENT,FlowLayout.LayoutParams.WRAP_CONTENT));
        l.addView(mainButton);

public class SmallButton extends Button {

public SmallButton(Context context) {
    super(context);
}

public SmallButton(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public SmallButton(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     super.onMeasure(widthMeasureSpec,MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, 35));
}

 @Override
protected void onDraw(Canvas canvas) {
    canvas.save();
    canvas.translate(0,-5);
    super.onDraw(canvas);
    canvas.restore();
}

}

我的背景有一个带有渐变的 Shape drawable,因为我不知道确切的宽度。我也尝试设置它的高度。是否可以让按钮只包裹文本?

编辑: 使用 TextView 而不是 Button 可以解决问题。当然,如果您没有使用 Button.class 中的特定/覆盖的东西。

【问题讨论】:

  • 如果您希望按钮高度仅包裹其文本,只需将 padding 设置为 0 并使用 android:layout_height = "wrap_content" ,它将在函数中将高度与您的按钮内容包裹起来
  • 我编辑了我的问题。我试过了,它不起作用。它只影响宽度而不影响高度。
  • 为什么不从 xml 布局中添加按钮? ?你的按钮的父级及其布局参数是什么?
  • 我无法从 xml 添加按钮,因为它们是随机生成的。父布局为FlowLayout,参数为:height-wrap_content、widht-match_parent。我也对 LinearLayout 进行了同样的尝试,但也没有帮助(我不认为父布局效果)。
  • 但它的布局参数可能会影响:),如果您为 FlowLayout 设置一些边距和填充,并将宽度或高度设置为固定大小。添加生成父级和按钮的完整代码

标签: android button layout


【解决方案1】:

有两个参数。 Button.setMinimumHeight() 和 Button.setMinHeight()。确保它们都设置为值“0”。

【讨论】:

  • 这真的很愚蠢,但确实,在我的项目中设置两者都完成了工作。
  • 我在使用 setMinHeight() 降低按钮高度方面没有成功,但这修复了它。为什么有两种方法来设置最小高度:-)
【解决方案2】:

Android 中的每个View 都可以为它们设置最小宽度和高度。 Button 将根据它在所使用的设备上使用的样式设置这些。

但是,这可以在按钮的 xml 中被覆盖:

android:minHeight="0dip"
android:minWidth="0dip"

正如@Sudar Nimalan 指出的,这与按钮的背景有关。如果您不想创建自己的按钮类,您可以简单地将背景设置为更小。尝试将背景设置为纯色,或为其创建自己的背景。

【讨论】:

  • 将背景设置为纯色或可绘制背景没有帮助。这将适用于 ImageButton,但不适用于按钮。
  • 好点 - 它改变宽度但不改变高度。有什么理由不将 9 部分 png 定义为背景并使用 ImageButton?答案已更新。
  • 按钮应该包含文本,这就是为什么我不能定义 9 补丁可绘制。 150 的 MinHeight、MaxHeight 完美,但 30 - 不工作,它设置为 50。所以这是一些最小高度,我不知道如何覆盖它。
  • 所以button.setMinHeight(0) 不会缩小到只换行吗?
  • button.setMinHeight(0) - 没有效果,button.setMinHeight(30) - 没有效果; button.setMinHeight(150); - 将按钮的高度设置为 150dp。
【解决方案3】:

试试这个

mainButton.setIncludeFontPadding(false);

【讨论】:

    【解决方案4】:

    我认为,由于默认背景可绘制的最小高度大小,您可以发送空背景或颜色并测试这些场景。

    如果你想用默认的drawable改变高度,你可以创建你的自定义按钮扩展按钮类并覆盖onMeasure和onDraw等。

    覆盖 onDraw 以移动默认按钮绘图:

    onDraw(canvas){
         canvas.save();
         canvas.translate(0,value to shift);
         super.onDraw(canves);
         canvas.restore();
    }
    
    
    @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
             super.onMeasure(widthMeasureSpec,MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, 35));
        }
    

    【讨论】:

    • 覆盖 onMeasure - this.setMeasuredDimension(this.getMeasuredWidth(), 40); - 剪切底部并剪切按钮文本,因为文本仍在按钮中间。 setGravity(center/top) 没有帮助。
    • 然后覆盖 onDraw 以将绘图向上移动,如上面给出的答案。
    • 它会剪切文本并在drawable底部留下空白空间。有时它会将文本转移到另一个视图中。
    • 您能否尝试按照给定的方式覆盖 onMeasure。因为文本绘制是由TextView完成的,Button的超级类
    • 当然,但没有任何改变。
    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2016-09-21
    相关资源
    最近更新 更多