3

横にテキストがあるカスタム ボタンを作成しようとしています。横に (x) が付いたアイテムのリストを用意するので、ユーザーは (x) を押してアイテムを削除できます。このような...

(x)アイテム1 (x)アイテム2 (x)アイテム3

ボタンを拡張するクラスがありますが、カスタム クラスを使用してボタンを作成すると、通常のボタンとして表示されるため、どのメソッドをオーバーライドすればよいかわかりません。これが私のコードです。

public class LabelButton extends Button {
  private final Context context;

  private final String label;

  public LabelButton( Context context, String label ) {
    super( context );
    this.context = context;
    this.label = label;
  }

  public View getView( View convertView, ViewGroup parent ) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
    View labelView = inflater.inflate( R.layout.label, parent, false );
    TextView textView = (TextView) labelView.findViewById( R.id.label );
    Button button = (Button) labelView.findViewById( R.id.buttonCancel );
    textView.setText( "X" );
    return labelView;
  }

}

4

2 に答える 2

1

LinearLayout を拡張するカスタム ビューを作成してから、Button と TextView を含む水平 LinearLayout で xml を膨らませることができます。カスタマイズのために、このチュートリアルのようなスタイル属性を作成することをお勧めします。

于 2012-10-23T13:18:15.053 に答える
1

Attrs パラメータで onDraw メソッドとコンストラクタをオーバーライドする必要があります

 public LabelButton(Context context, AttributeSet attrs, int defStyle) {
             super(context, attrs, defStyle); 
              if (attrs != null) {
              // set your attrs
         }
        }

 @Override
protected synchronized void onDraw(Canvas canvas) {
     super.onDraw(canvas);
     Paint textPaint = new Paint();
     textPaint.setAntiAlias(true);
     textPaint.setColor(textColor);
     textPaint.setTextSize(textSize);
     Rect bounds = new Rect();       
     textPaint.getTextBounds(totalText, 0, totalText.length(), bounds);
     int x = getWidth() / 2 - bounds.centerX();
     int y = getHeight() / 2 - bounds.centerY();
     canvas.drawText(text, getLeft(), y, textPaint);// draw your text in coords
}

public synchronized void setText(String text) {
     if (text != null) {
         this.text = text;
     } else {
         this.text = "";
     }
     postInvalidate();
}
于 2012-10-23T13:18:49.533 に答える