首页 > 解决方案 > CardView 和带有 TextView 子项的 LinearLayout 根本不显示

问题描述

我一直在尝试为我想出的一个简单的应用程序编写一些动态生成的布局代码。我想显示一排垂直的卡片,每个卡片都包含未定义数量的垂直对齐的文本框。

我编写了代码来生成这些并填充文本,但它似乎没有工作,我无法在我的一生中弄清楚它。

我是 Android Studio 的新手,Java 对我来说还是比较新鲜的,所以我很可能在这里遗漏了一些非常明显的东西。

我已经尝试在 A. Studio 中使用几种不同类型的 View,到目前为止,大多数都是自己工作的,但没有一个可以包含在一张适合我的卡片中。动态创建和编辑 textViews 的属性可以正常工作,但是一旦我包含卡片视图,它们就不再使用完全相同的代码出现。

    //Define Params
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

    params.setMargins(left,top,right,bottom);

    //Add a card for each ingredient
    for (Ingredient ing : ingredients)
    {
        CardView card = new CardView(this);

        CardView.LayoutParams cardParams = new CardView.LayoutParams(CardView.LayoutParams.WRAP_CONTENT, 200);
        card.setLayoutParams(cardParams);

        card.setRadius(15);
        card.setPadding(25,25,25,25);
        card.setElevation(10);
        card.setMaxCardElevation(30);

        card.setBackgroundColor(Color.DKGRAY);

        //Make a grid for each card, text on the left, image on the right
        LinearLayout linearLayoutInCard = new LinearLayout(card.getContext());

        LinearLayout.LayoutParams layoutParamsInCard = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        linearLayoutInCard.setLayoutParams(layoutParamsInCard);

        card.addView(linearLayoutInCard);


        for(int x = 0; x < 3; x++)
        {
            TextView textView = new TextView(this);
            textView.setLayoutParams(params);
            textView.setPadding(left, top, right, bottom);
            textView.setTextSize(15);
            textView.setElevation(11);
            textView.setTextColor(Color.WHITE);
            linearLayoutInCard.addView(textView);

            switch (x)
            {
                case 0:
                    textView.setText(ing.name);
                    break;
                case 1:
                    textView.setText(ing.price);
                    break;
                case 2:
                    //textView.setText(ing.calories);
                    break;

            }

        }

我期待一排卡片与文本框垂直对齐,每个卡片都有自己的内容(整个脚本现在只会制作一张卡片,但这是数据驱动的东西)但是当我运行应用程序时,我得到什么都没有,只是一个空白屏幕。

标签: javaandroidandroid-studio

解决方案


在进一步冒险之前……这可能是 XY 问题的一个例子。

也许看看 RecyclerView 选项?

RecyclerViews 完全设计用于管理 UI 外观和更改/滚动数据集的响应性。

起初它们可能有点“到底是什么”......但是一旦编写了几次,您的 UI 外观和代码库就会更加高效和干净。

RecyclerView 示例 Youtube


推荐阅读