最简单的填空题实现

开头一句话结论——用FlexboxLayout组合布局。

效果图如下:

 

自定义类:

import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.google.android.flexbox.AlignItems
import com.google.android.flexbox.FlexDirection
import com.google.android.flexbox.FlexWrap
import com.google.android.flexbox.FlexboxLayout


class FillBlankLayout : FlexboxLayout {
    constructor(context: Context) : super(context) {
        initView()
    }

    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
        initView()
    }

    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(
        context,
        attrs,
        defStyle
    ) {
        initView()
    }

    private fun initView() {
        flexDirection = FlexDirection.ROW
        flexWrap = FlexWrap.WRAP
        alignItems = AlignItems.CENTER
    }

    //设置数据 例:大家好:我是<fill>,我来自<fill>。
    fun setData(data: String) {
        removeAllViews()
        val split = data.split("<fill>") //根据传入的文本 使用<fill>进行切割
        split.forEachIndexed { index, s ->
            val textView = AppCompatTextView(context)
            textView.setTextColor(
                ContextCompat.getColor(
                    context.applicationContext,
                    R.color.color_3e4644
                )
            )
            textView.textSize = 14f //textview的文字大小
            textView.text = s //设置textview的文字
            addView(textView)
            if (index < split.size - 1) {
                val editText = AppCompatEditText(context)
                editText.minWidth = ViewUtil.dp2Px(context.applicationContext, 60)
                editText.textSize = 14f
                editText.setTextColor(
                    ContextCompat.getColor(
                        context.applicationContext,
                        R.color.color_3e4644
                    )
                )
                addView(editText)
            }
        }
    }

    //获取用户输入的文字列表
    fun getResult(): MutableList<String> {
        val result = mutableListOf<String>()
        for (i in 0 until childCount) {
            val childAt = getChildAt(i)
            if (childAt is AppCompatEditText) {
                result.add(childAt.text.toString())
            }
        }
        return result
    }
}

 布局代码:

 <com.xxx.view.fillblank.FillBlankLayout
        android:id="@+id/fbl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dm_20_dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btnGet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dm_20_dp"
        android:text="提取"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/fbl" />

activity代码 

 fbl.setData("大家好,我是<fill>,我来自<fill>。")
 btnGet.setOnClickListener {
     val result = fbl.getResult()
     result.forEach {
         Timber.e("数据:$it")
     }
 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值