3

通常のクラスのマージンとパディングの問題により、拡張Buttonするカスタムに取り組んできました。レイアウトの内容が表示されないという問題が発生しました。これを別のものに変更するとすぐに、コンテンツが表示されます。LayoutFrameLayoutRelativeLayout

これは私の関連コードです:

private static final int COLOR = R.styleable.MyButton_color;
private static final int TEXT = R.styleable.MyButton_text;

public MyButton(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  LayoutParams backgroundParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  backgroundParams.gravity = Gravity.FILL;
  background = new ImageView(context, null, defStyle);
  addView(background, backgroundParams);

  text = new TextView(context, null, defStyle);
  text.setTypeface(null, Typeface.BOLD);
  LayoutParams textParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  textParams.gravity = Gravity.CENTER;
  addView(text, textParams);

  TypedArray a = context.obtainStyledAttributes(R.styleable.MyButton);
  try {
    setColor(Color.values()[a.getInteger(COLOR, 0)]);
    setText(a.getString(TEXT));
  } finally {
    a.recycle();
  }
}

public void setText(CharSequence text) {
  this.text.setText(text);
}

private void setColor(Color color) {
  switch (color) {
    case ORANGE:
      text.setTextColor(getContext().getResources().getColor(R.color.text_blue));
      background.setImageResource(R.drawable.button_orange);
      break;
    case BLUE:
      //TODO set colors
      break;
  }
}

これには何が欠けていますか?

4

2 に答える 2

1

FrameLayout を拡張したもので、ほとんどの API バージョンで描画関数を呼び出さないようにフラグを設定した特別なレイアウトです。

これを克服するには、構築時にフラグを false に設定します。

public MyButton(
...
    setWillNotDraw(false);
...
于 2012-11-01T12:03:16.930 に答える
0

答えは明らかです。

LayoutParams backgroundParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

に置き換える必要があります

LayoutParams backgroundParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

textParamsもちろん、同じことが当てはまります。

于 2012-12-17T14:04:01.833 に答える