【问题标题】:Android: LinearLayout.addView not rendering added viewsAndroid:LinearLayout.addView 不呈现添加的视图
【发布时间】:2019-08-28 11:39:12
【问题描述】:

我正在尝试以编程方式(在循环中)将两个文本视图添加到LinearLayout,然后将其添加到布局文件中定义的LinearLayout。代码运行没有错误,在评估 getChildCount 时,我得到了预期值,但设备上绝对没有呈现任何内容。

XML

<LinearLayout
        android:id="@+id/llNotes"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginLeft="1dp"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:layout_marginBottom="@dimen/activity_vertical_margin_quarter"
        android:background="@drawable/rounded_bottom_corners"
        android:orientation="vertical"
        android:paddingTop="@dimen/activity_vertical_margin_half"
        android:paddingBottom="@dimen/activity_vertical_margin" />

Java

for (Note MyNote : foo.GetNotes()) {
            LinearLayout llNoteParent = new LinearLayout(this);
            TextView tvNoteHeader = new TextView(this);
            TextView tvNoteValue = new TextView(this);

            LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            llParams.gravity = Gravity.CENTER_HORIZONTAL;
            llNoteParent.setLayoutParams(llParams);
            llNoteParent.setOrientation(LinearLayout.HORIZONTAL);
            llNoteParent.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
            llNoteParent.setPadding(R.dimen.activity_horizontal_margin, R.dimen.activity_vertical_margin_half, R.dimen.activity_horizontal_margin, R.dimen.activity_horizontal_margin);

            LinearLayout.LayoutParams tvNoteHeaderParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT);
            tvNoteHeaderParams.weight = 1;
            tvNoteHeader.setLayoutParams(tvNoteHeaderParams);
            tvNoteHeader.setPadding(R.dimen.activity_vertical_margin_half, R.dimen.activity_vertical_margin_half, R.dimen.activity_vertical_margin_half, R.dimen.activity_vertical_margin_half);
            tvNoteHeader.setBackground(getDrawable(R.drawable.left_text_field));
            tvNoteHeader.setGravity(Gravity.CENTER);
            tvNoteHeader.setText(MyNote.GetAbbreviatedText());

            LinearLayout.LayoutParams tvNoteValueParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT);
            tvNoteValueParams.weight = 1;
            tvNoteValue.setLayoutParams(tvNoteValueParams);
            tvNoteValue.setPadding(R.dimen.activity_vertical_margin_half, R.dimen.activity_vertical_margin_half, R.dimen.activity_vertical_margin_half, R.dimen.activity_vertical_margin_half);
            tvNoteValue.setBackground(getDrawable(R.drawable.right_text_field));
            tvNoteValue.setText(MyNote.GetText());

            llNoteParent.addView(tvNoteHeader);
            llNoteParent.addView(tvNoteValue);
            llNotes.addView(llNoteParent);
        }

【问题讨论】:

  • 除了下面的(正确)答案之外,我只想指出,我可以通过使用以下方法将尺寸文件中的 dp 值转换为 setPadding 所需的 int 数据类型:context.getResources ().getDimensionPixelSize(R.dimen.activity_horizo​​ntal_margin)

标签: java android xml textview android-linearlayout


【解决方案1】:

你不能用 dp 将数字传递给 setPadding 方法

setPadding(R.dimen.activity_horizontal_margin, R.dimen.activity_vertical_margin_half, R.dimen.activity_horizontal_margin, R.dimen.activity_horizontal_margin);

您需要将整数传递给 setPadding 方法。

1-试试这样的

llNoteParent.setPadding(20,20,20,20);
tvNoteHeader.setPadding(20,20,20,20);

2- 或用户 integer.xml

     for (Note MyNote : foo.GetNotes()) {
                LinearLayout llNoteParent = new LinearLayout(this);
                TextView tvNoteHeader = new TextView(this);
                TextView tvNoteValue = new TextView(this);

                LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                llParams.gravity = Gravity.CENTER_HORIZONTAL;
                llNoteParent.setLayoutParams(llParams);
                llNoteParent.setOrientation(LinearLayout.HORIZONTAL);
                llNoteParent.setBackgroundColor(ContextCompat.getColor(this, R.color.white));
                llNoteParent.setPadding(R.integer.activity_horizontal_margin, R.integer.activity_vertical_margin_half, R.integer.activity_horizontal_margin, R.integer.activity_horizontal_margin);

                LinearLayout.LayoutParams tvNoteHeaderParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT);
                tvNoteHeaderParams.weight = 1;
                tvNoteHeader.setLayoutParams(tvNoteHeaderParams);
                tvNoteHeader.setPadding(R.integer.activity_vertical_margin_half, R.integer.activity_vertical_margin_half, R.integer.activity_vertical_margin_half, R.integer.activity_vertical_margin_half);
                tvNoteHeader.setBackground(getDrawable(R.drawable.left_text_field));
                tvNoteHeader.setGravity(Gravity.CENTER);
                tvNoteHeader.setText(MyNote.GetAbbreviatedText());

                LinearLayout.LayoutParams tvNoteValueParams = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT);
                tvNoteValueParams.weight = 1;
                tvNoteValue.setLayoutParams(tvNoteValueParams);
                tvNoteValue.setPadding(R.integer.activity_vertical_margin_half, R.integer.activity_vertical_margin_half, R.integer.activity_vertical_margin_half, R.integer.activity_vertical_margin_half);
                tvNoteValue.setBackground(getDrawable(R.drawable.right_text_field));
                tvNoteValue.setText(MyNote.GetText());

                llNoteParent.addView(tvNoteHeader);
                llNoteParent.addView(tvNoteValue);
                llNotes.addView(llNoteParent);
 }

注意:将值添加到 integer.xml 文件中的值。

【讨论】:

  • 就是这样,谢谢!我有点困惑为什么编译器不能向我指出这一点。
【解决方案2】:

你必须使用,

float horizontalMargin = getResources()
            .getDimension(R.dimen.R.dimen.activity_horizontal_margin);
float verticleMargin = getResources()
            .getDimension(R.dimen.R.dimen.activity_vertical_margin_half);

在设置填充之后,

llNoteParent.setPadding(horizontalMargin,verticleMargin, horizontalMargin, horizontalMargin);
tvNoteHeader.setPadding(verticleMargin, verticleMargin, verticleMargin, verticleMargin);
tvNoteValue.setPadding(verticleMargin, verticleMargin, verticleMargin, verticleMargin);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2019-12-10
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多