FrameLayout的内容未显示

时间:2012-11-01 09:14:19

标签: android android-layout

由于常规Button课程的边距和填充问题,我一直致力于扩展Layout的自定义FrameLayout。 我遇到了一个问题,即布局的内容没有显示出来。 一旦我将其改为另一个,例如RelativeLayout显示内容。

这是我的相关代码:

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;
  }
}

我在这个上缺少什么?

2 个答案:

答案 0 :(得分:1)

扩展FrameLayout,这是一个特殊的布局,它在大多数API版本上设置了一个标志,不能调用绘图函数。

要解决此问题,请在构造时将标志设置为false:

public MyButton(
...
    setWillNotDraw(false);
...

答案 1 :(得分:0)

答案很明显。

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

必须替换为

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

同样适用于textParams