我一直在尝试为我想出的一个简单应用程序编写一些动态生成的布局代码。我想显示一排垂直的卡片,每张卡片都包含未定义数量的垂直对齐的文本框。
我编写了代码来生成这些并填充文本,但它似乎不起作用,我一生都无法弄清楚。
我是 Android Studio 的新手,Java 对我来说也还比较陌生,所以我很可能会错过一些非常明显的东西。
我尝试在 A.Studio 中使用几种不同类型的 View ,到目前为止,大多数都可以单独工作,但没有一个可以包含在对我来说是理想的卡片中。动态创建和编辑 textView 的属性效果很好,但是一旦我包含了卡片 View ,它们就不再使用完全相同的代码出现。
//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;
}
}
我期待一排垂直的卡片,其中的文本框与它们垂直对齐,每个卡片都有自己的内容(整个脚本目前只会制作一张卡片,但这是数据驱动的事情),但是当我运行应用程序时,除了空白屏幕之外什么也没有。
最佳答案
在进一步冒险之前......这可能是 XY 问题的一个例子。
也许看看 RecyclerView 选项?
RecyclerViews 完全是为了管理 UI 外观和更改/滚动数据集的响应能力而设计的。
一开始它们可能有点“到底是什么”……但是一旦编写了几次,您的 UI 外观和代码库就会变得更加高效和干净。
关于java - CardView 和 LinearLayout 的 TextView 子项根本不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909988/