0

我是 Android 开发新手,正在尝试创建一个填字游戏应用程序。目前,我有一个名为 CrosswordCell 的自定义按钮,用于填字游戏中的每个方块,它可以根据需要处理样式和交互。我打算使用按钮的文本来表示用户输入到网格的字母。

我正在尝试添加小标签编号,但不知道该怎么做。是否可以在 CrosswordCell 类本身中添加它,或者我是否需要在每个 CrosswordCell 旁边的布局中添加一个 TextView?

我知道这是一个非常广泛的问题,并且可能有很多不同的方法。我还没有找到很好的例子来帮助指导我,所以任何输入都表示赞赏。下面是我正在尝试完成的示例图片和一段 XML(仅显示第一行的 3 个单元格以便于阅读)和我正在使用的类:

填字游戏示例

XML

    <LinearLayout
        android:id="@+id/grid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:id="@+id/row0"
            style="@style/CrosswordRow">
            <com.example.crosswordconstructor.CrosswordCell
                android:id="@+id/cell00"
                style="@style/CrosswordCell"
                android:text="A" />
            <com.example.crosswordconstructor.CrosswordCell
                android:id="@+id/cell01"
                style="@style/CrosswordCell"
                android:text="A" />
            <com.example.crosswordconstructor.CrosswordCell
                android:id="@+id/cell02"
                style="@style/CrosswordCell"
                android:text="A" />
                .
                .
                .
        </LinearLayout>
        .
        .
        .
    </LinearLayout>

Kotlin 类

package com.example.crosswordconstructor
import android.content.Context
import android.util.AttributeSet

class CrosswordCell @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : androidx.appcompat.widget.AppCompatButton(context, attrs, defStyleAttr)
{
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        var width = MeasureSpec.getSize(widthMeasureSpec)
        var height = MeasureSpec.getSize(heightMeasureSpec)
        if (width > (height + 0.5).toInt() ) {
            width = (height + 0.5).toInt()
        } else {
            height = width
        }
        super.onMeasure(
            MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
        )
    }
}
4

0 回答 0