📌  相关文章
📜  如何在 Android 中的 EditText 中设置最小和最大输入值?

📅  最后修改于: 2022-05-13 01:55:30.445000             🧑  作者: Mango

如何在 Android 中的 EditText 中设置最小和最大输入值?

在 Android 中,EditText 是 TextView 的子类,它被配置为可编辑。 EditText 用于提供文本输入,例如字符、字符串、数字等。除非明确说明,否则它对输入的类型没有限制。这意味着我们可以将 EditText 属性设置为仅接受字符串或数字。最重要的是,我们可以创建方法来只接受某种类型的值,以促进所需的任务。

在本文中,我们将向您展示如何在 EditText 中设置最小和最大输入值。

分步实施

第 1 步:在 Android Studio 中创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。我们在Kotlin 中演示了该应用程序,因此请确保在创建新项目时选择 Kotlin 作为主要语言。



步骤 2:使用 activity_main.xml 文件

导航到app > res > layout > activity_main.xml并将以下代码添加到该文件中。下面是activity_main.xml文件的代码。在布局中添加带有 inputType 的 EditText 作为数字。

XML


  
    
    
  


Kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.InputFilter
import android.text.Spanned
import android.widget.EditText
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring and Initializing  edit text from the layout
        val editText = findViewById(R.id.editText)
  
        // Assigning filters
        editText.filters = arrayOf(MinMaxFilter(1, 100))
    }
  
    // Custom class to define min and max for the edit text
    inner class MinMaxFilter() : InputFilter {
        private var intMin: Int = 0
        private var intMax: Int = 0
  
        // Initialized
        constructor(minValue: Int, maxValue: Int) : this() {
            this.intMin = minValue
            this.intMax = maxValue
        }
  
        override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dStart: Int, dEnd: Int): CharSequence? {
            try {
                val input = Integer.parseInt(dest.toString() + source.toString())
                if (isInRange(intMin, intMax, input)) {
                    return null
                }
            } catch (e: NumberFormatException) {
                e.printStackTrace()
            }
            return ""
        }
  
        // Check if input c is in between min a and max b and
        // returns corresponding boolean
        private fun isInRange(a: Int, b: Int, c: Int): Boolean {
            return if (b > a) c in a..b else c in b..a
        }
    }
}


步骤 3:使用MainActivity.kt 文件

转到MainActivity.kt文件并参考以下代码。下面是MainActivity.kt文件的代码。代码中添加了注释以更详细地理解代码。创建一个内部类来为 EditText 设置最小和最大输入值。

科特林

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.InputFilter
import android.text.Spanned
import android.widget.EditText
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring and Initializing  edit text from the layout
        val editText = findViewById(R.id.editText)
  
        // Assigning filters
        editText.filters = arrayOf(MinMaxFilter(1, 100))
    }
  
    // Custom class to define min and max for the edit text
    inner class MinMaxFilter() : InputFilter {
        private var intMin: Int = 0
        private var intMax: Int = 0
  
        // Initialized
        constructor(minValue: Int, maxValue: Int) : this() {
            this.intMin = minValue
            this.intMax = maxValue
        }
  
        override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dStart: Int, dEnd: Int): CharSequence? {
            try {
                val input = Integer.parseInt(dest.toString() + source.toString())
                if (isInRange(intMin, intMax, input)) {
                    return null
                }
            } catch (e: NumberFormatException) {
                e.printStackTrace()
            }
            return ""
        }
  
        // Check if input c is in between min a and max b and
        // returns corresponding boolean
        private fun isInRange(a: Int, b: Int, c: Int): Boolean {
            return if (b > a) c in a..b else c in b..a
        }
    }
}

输出:

您可以看到,如果我们尝试提供 1-100 之间的输入,我们可以看到它在 EditText 中输入。但是,如果我们尝试给出 0 或大于 100 的值,则不会接受输入,因此不会在 EditText 中显示或键入。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!