图像无法呈现

Images won't render

提问人:Simon Van den Bossche 提问时间:10/6/2023 更新时间:10/6/2023 访问量:19

问:

我正在创建一个应用程序来计时魔方解决。

我想在我的活动中动态添加带有图标的按钮。 我的活动的布局文件,按钮将添加到线性布局中。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".GraphSelectorActivity">

    <LinearLayout
        android:id="@+id/cube_sequence_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_graphselector_home"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:background="@drawable/transparent_button_with_outline"
        android:text="@string/lbl_back"
        app:backgroundTint="@null"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

活动的代码 cubeSequences 是以空格分隔的多维数据集的列表。例"3x3 4x4"

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;

import be.svdb.cubetimer.templates.CubeIcon;

public class GraphSelectorActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_graph_selector);

        String[] cubeSequences = HomeActivity.db.getSolvedCubeSequences();

        LinearLayout cubeSequenceContainer = findViewById(R.id.cube_sequence_container);
        for (String cubeSequence : cubeSequences) {
            cubeSequenceContainer.addView(new CubeSequenceButton(this, cubeSequence));
        }

    }
}

图标位于 drawable 文件夹中。

该活动创建 CubeSequenceButtons。这是它的布局文件(位于布局文件夹中)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:clickable="true"
    android:padding="5dp"
    android:background="@drawable/transparent_button_with_outline"
    tools:context=".CubeSequenceButton" />

及其代码:

import android.content.Context;
import android.widget.LinearLayout;

import be.svdb.cubetimer.templates.CubeIcon;

public class CubeSequenceButton extends LinearLayout {
    private String cubeSequence;

    public CubeSequenceButton(Context context, String cubeSequence) {
        super(context);

        this.cubeSequence = cubeSequence;

        inflate(getContext(), R.layout.cube_sequence_button, this);

        for (String cube : cubeSequence.split(" ")) {
            addView(new CubeIcon(context, getResources().getIdentifier(
                    "icon_" + cube.toLowerCase(), "drawable", context.getPackageName())));
        }
    }
}

最后是 CubeIcon 布局文件和代码。

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:context=".templates.CubeIcon" />
import android.content.Context;

import androidx.appcompat.widget.AppCompatImageView;

public class CubeIcon extends AppCompatImageView {
    public CubeIcon(Context context, int iconID) {
        super(context);

        setImageResource(iconID);
    }
}

模拟器的渲染,如您所见,布局被渲染(轮廓),但没有图标。enter image description here

android-layout

评论

0赞 dect 10/6/2023
使用recyclerview不是更容易吗?
0赞 Ryan M 10/6/2023
“CubeIcon 布局文件”实际使用在哪里?看起来不像是。
0赞 Simon Van den Bossche 10/6/2023
Android 将它们链接在一起。我已经测试过了。

答: 暂无答案