Android 自定义视图不';不显示在自定义视图组中

Android 自定义视图不';不显示在自定义视图组中,android,android-custom-view,viewgroup,Android,Android Custom View,Viewgroup,我正在尝试为Android创建一款纸牌游戏,但我遇到了一个令人困惑的问题。 我有一个名为CardBG的自定义视图,它是从ViewFlipper类扩展而来的,因此我可以翻转卡片并显示正面和背面。这个很好用。 但是我需要在卡片上添加一些其他的东西,比如一个文本字段。因此,我创建了一个视图组,相信我可以简单地向其中添加视图。但是,将此视图组添加到“我的活动”不会产生任何结果。 我做错了什么?这是一种错误的方法吗? 我也尝试过让Card扩展一个布局类,比如RelativeLayout,但它给了我同样的结

我正在尝试为Android创建一款纸牌游戏,但我遇到了一个令人困惑的问题。 我有一个名为CardBG的自定义视图,它是从ViewFlipper类扩展而来的,因此我可以翻转卡片并显示正面和背面。这个很好用。 但是我需要在卡片上添加一些其他的东西,比如一个文本字段。因此,我创建了一个视图组,相信我可以简单地向其中添加视图。但是,将此视图组添加到“我的活动”不会产生任何结果。 我做错了什么?这是一种错误的方法吗? 我也尝试过让Card扩展一个布局类,比如RelativeLayout,但它给了我同样的结果

以下是相关代码,必须动态添加卡,因此没有xml欺骗:

TestActivity.java

public class TestActivity extends Activity {
RelativeLayout menuLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    menuLayout = (RelativeLayout) findViewById(R.id.layout_menu);

    Card c = new Card(this, null);
    c.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    menuLayout.addView(c);
    }
}
java

public class Card extends ViewGroup{
CardBG background;

TextView text1;

public Card(Context context, AttributeSet attrs) {
    super(context, attrs);
    Log.w("Card", "Constructor");

    background = new CardBG(context, null);
    background.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    this.addView(background);
    }

(protected void onLayout is also in this file, but i do nothing in that method except calling super.onLayout)
}
CardBG.java

public class CardBG extends ViewFlipper{

ImageView blue;
ImageView red;

public CardBG(Context context, AttributeSet attrs) {
    super(context, attrs);
    Log.w("CardBG", "Constructor");

    blue = new ImageView(context);
    blue.setImageResource(R.drawable.card_blue);
    blue.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    this.addView(blue);

    red = new ImageView(context);
    red.setImageResource(R.drawable.card_red);
    red.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    this.addView(red);

    //from here on out there are only onclick listener to test the flipping animations

}

在扩展视图组时。您必须实现onLayout方法。在onLayout中,您需要对此视图组的每个子视图调用layout方法,并为它们提供所需的位置(相对于父视图)。您可以查看FrameLayout(ViewGroup最简单的子类之一)的源代码以了解其工作原理

尽管如此,您可以从相对布局线性布局或简单的框架布局扩展视图。RelativeLayout只提供自己的布局实现,并为其子级提供相对位置

编辑: 您可能需要在当前视图中展开布局。 示例代码:

 public class Card extends RelativeLayout {

    public Card(Context context, AttributeSet attr) {
          super(context, attr);
          View.inflate(context, R.layout.my_card_layout, this);
     }
    }

怎么办?在onLayout中使用setLayoutParams()只会产生一系列错误/警告。你能给我举个例子吗?编辑:否决票是怎么回事?这是一个简单明了的问题。使用xml布局和布局我知道,我以前试过,但没有成功。现在是了。奇怪,但谢谢你的帮助。确实如此,让我从我的应用程序中粘贴一个示例代码。@Adnan如果使用默认的onLayout实现,为什么要扩展RelativeLayout?@Adnan那么你只添加了一个子项的RelativeLayout,为什么?不,R.layout.my_card_layout是一个完整的布局xml文件。它可能有几十个视图。