Android Kotlin在动态添加的edittext上设置属性

Android Kotlin在动态添加的edittext上设置属性,android,kotlin,android-edittext,Android,Kotlin,Android Edittext,我正在尝试学习Kotlin,我想在android手机的屏幕上创建一系列动态相邻的编辑文本 编辑文本的数量取决于用户必须猜测的单词长度。因此,如果单词是dog,则应为单词中的每个字母向用户提供编辑文本 所以我做了类似的事情 for (letter in word) { val editText = EditText(this) ... } 然后将它们附加到线性布局中。 但是我想在添加edittext之前在其上设置一些属性,对此我完全不知所措 谁能给我指一下正确的方向吗 请帮助我,

我正在尝试学习Kotlin,我想在android手机的屏幕上创建一系列动态相邻的编辑文本

编辑文本的数量取决于用户必须猜测的单词长度。因此,如果单词是dog,则应为单词中的每个字母向用户提供编辑文本

所以我做了类似的事情

for (letter in word) {
    val editText = EditText(this)
    ...
}
然后将它们附加到线性布局中。 但是我想在添加edittext之前在其上设置一些属性,对此我完全不知所措

谁能给我指一下正确的方向吗


请帮助我,我很困惑…:-)

如果知道要添加到编辑文本中的属性,可以为其创建XML布局。您可以设置文本颜色、背景等,然后放大布局

所以在你的for循环中,你会这样做

    val inflater = LayoutInflater.from(this)
    val editText = inflater.inflate(R.layout.YourCustomEditText, null, false) as EditText
// add to editText to your linearLayout as you're already doing
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_text_vew"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:background="@color/white"
    android:hint="hint"
    android:orientation="vertical"
    android:padding="4dp"
    android:paddingStart="8dp"
    android:paddingTop="4dp"
    android:paddingEnd="8dp"
    android:textColor="@color/colorAccent"></EditText>
然后CustomEditText将是这样的xml文件

    val inflater = LayoutInflater.from(this)
    val editText = inflater.inflate(R.layout.YourCustomEditText, null, false) as EditText
// add to editText to your linearLayout as you're already doing
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_text_vew"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:background="@color/white"
    android:hint="hint"
    android:orientation="vertical"
    android:padding="4dp"
    android:paddingStart="8dp"
    android:paddingTop="4dp"
    android:paddingEnd="8dp"
    android:textColor="@color/colorAccent"></EditText>

如果知道要添加到编辑文本中的属性,可以为其创建XML布局。您可以设置文本颜色、背景等,然后放大布局

所以在你的for循环中,你会这样做

    val inflater = LayoutInflater.from(this)
    val editText = inflater.inflate(R.layout.YourCustomEditText, null, false) as EditText
// add to editText to your linearLayout as you're already doing
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_text_vew"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:background="@color/white"
    android:hint="hint"
    android:orientation="vertical"
    android:padding="4dp"
    android:paddingStart="8dp"
    android:paddingTop="4dp"
    android:paddingEnd="8dp"
    android:textColor="@color/colorAccent"></EditText>
然后CustomEditText将是这样的xml文件

    val inflater = LayoutInflater.from(this)
    val editText = inflater.inflate(R.layout.YourCustomEditText, null, false) as EditText
// add to editText to your linearLayout as you're already doing
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_text_vew"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:background="@color/white"
    android:hint="hint"
    android:orientation="vertical"
    android:padding="4dp"
    android:paddingStart="8dp"
    android:paddingTop="4dp"
    android:paddingEnd="8dp"
    android:textColor="@color/colorAccent"></EditText>

使用EditText创建xml布局

input_edittext_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/input_letter_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:padding="8dp"
/>

在主布局中添加要使用id显示的线性布局

activity_words.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".WordsActivity">
<LinearLayout
    android:id="@+id/letter_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    />

</LinearLayout>

WordsActivity.kt

class WordsActivity : AppCompatActivity() {

val wordlist = listOf("Cat", "dog", "Tiger", "Elephant")
lateinit var wordlayout: LinearLayout
val currentEditTextList = mutableListOf<EditText>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_words)
    wordlayout = findViewById<LinearLayout>(R.id.letter_input_layout)
    findMatchedString("Elephant")//example calling from here 

}
//String passed as argument to compare from word list
fun findMatchedString(inputString: String){
    wordlist.forEach {
       if(it == inputString){
           addEditTextToLayout(inputString)
       }else{
           //Handle your logic to handle else case
       }
    }
}

fun addEditTextToLayout(matchedString: String) {

    //first adding EditText objects to list
    matchedString?.let {
        it.forEachIndexed { index, element ->
            val editText = getInputEditText()
            editText.tag = index
            editText.setText(element.toString())//This line added to check the 
        each letter on the each EditText separately
            currentEditTextList.add(editText)
        }
    }

    //second adding each EditText from list to layout
    currentEditTextList?.let {
        if (it.size > 0) {
            it.forEachIndexed { index, element ->
                element.tag = index
                wordlayout.addView(element)
            }
        }
    }
}


fun getInputEditText() : EditText{
return layoutInflater.inflate(R.layout.input_edittext_layout, null, false) as 
EditText
    }
  }
class-WordsActivity:appcompativity(){
val wordlist=listOf(“猫”、“狗”、“老虎”、“大象”)
lateinit变量wordlayout:LinearLayout
val currentEditTextList=mutableListOf()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u单词)
wordlayout=findviewbyd(R.id.letter\u input\u layout)
findMatchedString(“大象”)//从这里调用的示例
}
//作为参数从单词列表中传递以进行比较的字符串
fun findMatchedString(inputString:String){
wordlist.forEach{
if(it==inputString){
addEditTextToLayout(inputString)
}否则{
//处理你的逻辑来处理其他情况
}
}
}
趣味addEditTextToLayout(匹配字符串:字符串){
//首先将EditText对象添加到列表中
匹配的字符串?让我们{
it.foreachinedexed{index,element->
val editText=getInputItemText()
editText.tag=索引
editText.setText(element.toString())//添加此行是为了检查
每个编辑文本上的每个字母都是分开的
currentEditTextList.add(编辑文本)
}
}
//第二步,将列表中的每个编辑文本添加到布局中
currentEditTextList?让我们{
如果(it.size>0){
it.foreachinedexed{index,element->
element.tag=索引
wordlayout.addView(元素)
}
}
}
}
fun GetInputItemText():EditText{
返回LayoutFlater.充气(R.layout.input\u edittext\u layout,null,false)为
编辑文本
}
}

使用EditText创建xml布局

input_edittext_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/input_letter_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:padding="8dp"
/>

在主布局中添加要使用id显示的线性布局

activity_words.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".WordsActivity">
<LinearLayout
    android:id="@+id/letter_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    />

</LinearLayout>

WordsActivity.kt

class WordsActivity : AppCompatActivity() {

val wordlist = listOf("Cat", "dog", "Tiger", "Elephant")
lateinit var wordlayout: LinearLayout
val currentEditTextList = mutableListOf<EditText>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_words)
    wordlayout = findViewById<LinearLayout>(R.id.letter_input_layout)
    findMatchedString("Elephant")//example calling from here 

}
//String passed as argument to compare from word list
fun findMatchedString(inputString: String){
    wordlist.forEach {
       if(it == inputString){
           addEditTextToLayout(inputString)
       }else{
           //Handle your logic to handle else case
       }
    }
}

fun addEditTextToLayout(matchedString: String) {

    //first adding EditText objects to list
    matchedString?.let {
        it.forEachIndexed { index, element ->
            val editText = getInputEditText()
            editText.tag = index
            editText.setText(element.toString())//This line added to check the 
        each letter on the each EditText separately
            currentEditTextList.add(editText)
        }
    }

    //second adding each EditText from list to layout
    currentEditTextList?.let {
        if (it.size > 0) {
            it.forEachIndexed { index, element ->
                element.tag = index
                wordlayout.addView(element)
            }
        }
    }
}


fun getInputEditText() : EditText{
return layoutInflater.inflate(R.layout.input_edittext_layout, null, false) as 
EditText
    }
  }
class-WordsActivity:appcompativity(){
val wordlist=listOf(“猫”、“狗”、“老虎”、“大象”)
lateinit变量wordlayout:LinearLayout
val currentEditTextList=mutableListOf()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u单词)
wordlayout=findviewbyd(R.id.letter\u input\u layout)
findMatchedString(“大象”)//从这里调用的示例
}
//作为参数从单词列表中传递以进行比较的字符串
fun findMatchedString(inputString:String){
wordlist.forEach{
if(it==inputString){
addEditTextToLayout(inputString)
}否则{
//处理你的逻辑来处理其他情况
}
}
}
趣味addEditTextToLayout(匹配字符串:字符串){
//首先将EditText对象添加到列表中
匹配的字符串?让我们{
it.foreachinedexed{index,element->
val editText=getInputItemText()
editText.tag=索引
editText.setText(element.toString())//添加此行是为了检查
每个编辑文本上的每个字母都是分开的
currentEditTextList.add(编辑文本)
}
}
//第二步,将列表中的每个编辑文本添加到布局中
currentEditTextList?让我们{
如果(it.size>0){
it.foreachinedexed{index,element->
element.tag=索引
wordlayout.addView(元素)
}
}
}
}
fun GetInputItemText():EditText{
返回LayoutFlater.充气(R.layout.input\u edittext\u layout,null,false)为
编辑文本
}
}

为什么不使用RecyclerView进行此操作?为什么不使用RecyclerView呢?我正在试,我正在试,谢谢。但是我不明白充气标签是什么:)对不起,输入错误-应该是充气的谢谢。但我不明白什么是充气标签:)对不起,打字错误-应该只是充气