2

ボタンの高さを 30px 未満に設定するには? 私は次を試しました:


ここに画像の説明を入力


  1. setHeight(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 ドローアブルがあります。高さも合わせてみました。ボタンをテキストのみでラップすることは可能ですか?

編集: この問題は、ボタンの代わりに TextView を使用することで解決されます。もちろん、Button.class で特定の/オーバーライドされたものを使用していない場合。

4

4 に答える 4

12

パラメータは 2 つあります。Button.setMinimumHeight() および Button.setMinHeight()。両方が値「0」に設定されていることを確認してください。

于 2014-08-04T19:43:38.010 に答える
1

Android のすべてViewには、最小の幅と高さを設定できます。Buttonは、使用しているデバイスで使用しているスタイルに応じてこれらを設定します。

ただし、これはボタンの xml でオーバーライドできます。

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

@Sudar Nimalan が指摘しているように、これはボタンの背景に関連しています。独自のボタン クラスを作成したくない場合は、単純に背景を小さいものに設定できます。背景を単色に設定するか、独自の背景を作成してみてください。

于 2013-06-20T10:01:05.580 に答える
0

これは、デフォルトの背景のドローアブルの最小高サイズが原因であると思います。空の背景または色を送信して、これらのシナリオをテストできます。

デフォルトのドローアブルで高さを変更したい場合は、Button クラスを拡張するカスタム ボタンを作成し、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));
    }
于 2013-06-20T09:18:13.993 に答える
0

これを試して

mainButton.setIncludeFontPadding(false);
于 2013-06-20T09:06:42.863 に答える