【问题标题】:TextView overwrites new text on top of old, rather than replace it. (Kotlin - Android)TextView 在旧文本之上覆盖新文本,而不是替换它。 (科特林 - 安卓)
【发布时间】:2020-12-08 16:39:10
【问题描述】:

我有一个 textView 可以正确地做到这一点:

<TextView
            android:id="@+id/tvAbove"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="LIMBER UP"
            android:textColor="@color/colorAccent"
            android:textSize="22sp"
            android:textStyle="bold"/>

但是在我的代码中,我想将文本更改为新内容,如下所示:

tvAbove.text = "HELLO453"

新文本只是覆盖它,而不是删除和替换。

请帮助我获得正常行为。 提前非常感谢。

这是为提问者准备的课程:

 class ExerciseActivity : AppCompatActivity() {

    private var restTimer: CountDownTimer?= null
    private var exerciseTimer: CountDownTimer?= null
    private var restProgress = 0
    private var exerciseProgress = 0


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_exercise)

        //toolbar acts as action bar
        setSupportActionBar(toolbar_exercise_activity)
        val actionbar = supportActionBar
        if(actionbar != null){
            actionbar.setDisplayHomeAsUpEnabled(true)
        }
        toolbar_exercise_activity.setNavigationOnClickListener{
            onBackPressed()
        }



        setupRestView()
    }

    private fun setRestProgressBar(){
        progressBar.progress = restProgress
        restTimer = object : CountDownTimer(10000, 1000){
            override fun onTick(millisUntilFinished: Long) {
                Log.i("onTick", "restProgress = ${restProgress.toString()}")
                restProgress++
                if(restProgress == 6){
                    tvAbove.text = ""
                    tvAbove.text = "HELLO543"
                }
                progressBar.progress = 10 - restProgress
                tvTimer.text = (10 - restProgress).toString()

                Log.i("tvTimer.text = ", tvTimer.text as String)
            }

            override fun onFinish() {
                Toast.makeText(this@ExerciseActivity, "Now start the exercise", Toast.LENGTH_SHORT).show()
            }
        }.start()
    }



    override fun onDestroy() {
        if(restTimer != null){
            restTimer!!.cancel()
            restProgress = 0

        }
        super.onDestroy()
    }
    private fun resetRestView(){
        if(restTimer != null){
            restTimer!!.cancel()
            restProgress = 0
        }
    }


    private fun setupRestView(){
        Log.i("msg", object{}.javaClass.enclosingMethod!!.name)
        resetRestView()
        setRestProgressBar()
    }
}

【问题讨论】:

  • 这个 TextView 是否包含在自定义 View 类中?看起来帧缓冲区在绘制之前没有被清除,但这通常都是在 Android 的视图系统内部处理的。
  • 我不这么认为,它只是一个标准的textView。我怎么知道我是否定制了它?
  • 你会知道的。但我说的是包含它的视图,而不是 TextView 本身。
  • 您是否对清单中的活动进行了任何修改,例如更改硬件渲染设置?
  • 不,我已经添加了这个:活动>

标签: android kotlin textview settext


【解决方案1】:

这很奇怪,你能分享你的 Kotlin 课程吗?我建议的第一个解决方案是“清理”文本,然后放入你的文本:

tvAbove.text = ""
tvAbove.text = "Hello453"

【讨论】:

  • 感谢您的回复。我认为您的建议不是删除任何带有“”的文本,它只是像以前一样在文本顶部不写任何内容。有没有分享一大块代码的好方法?我不允许编辑问题并将其放入课堂。
  • 不应该有任何东西阻止您编辑自己的问题。
  • @LiamBaron 我试过你的代码,对我来说一切正常。
  • @akhil Nair。感谢您尝试,知道这是我的机器很有用。
猜你喜欢
  • 1970-01-01
  • 2022-11-30
  • 2022-01-20
  • 2011-05-08
  • 2018-08-30
  • 2019-09-19
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多