我尝试更改TextView1的按下背景。这是我在drawable文件夹中的text.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/white" />
<item android:drawable="@android:color/black"/>
</selector>
这是我的Kotlin文件:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_app)
var textview1 = findViewById(R.id.TextView1) as TextView
textview1.setOnClickListener{
val t = TextView(this)
t.setBackgroundResource(R.drawable.text)
}
}
我是根据以下答案回答的:Programatically make TextView background color change while pressed
TextView1:
<TextView
android:id="@+id/TextView1"
android:layout_width="50dp"
android:layout_height="50dp"/>
有人知道我在想什么吗?我是乞gg。
对不起,这是我在代码中的错误。正确的代码是:
var textview1 = findViewById(R.id.TextView1) as TextView
textview1.setOnClickListener {
//val t = TextView(this)
textview1.setBackgroundResource(R.drawable.text)
答案 0 :(得分:1)
您需要在onClick事件之前而不是之后在textview上设置背景。现在,在处理完点击事件之后,该颜色将应用于新的Textview(t
)。该Textview不是屏幕上显示的视图(textview1
)
使用以下之一:
<TextView
android:id="@+id/TextView1"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/text"/>
或
textview1.setBackgroundResource(R.drawable.text)
textview1.setOnClickListener{
//Handle click
}
此外,如果您将代码更改为:
textview1.setOnClickListener{
textview1.setBackgroundResource(R.drawable.text)
}
您会注意到,在第一次点击后 确实应用了状态列表
答案 1 :(得分:0)
仅当您希望对点击动画产生波纹效果时使用
android:background="?android:attr/selectableItemBackground"
答案 2 :(得分:0)
尽管如上所述,您可以通过编程方式执行此操作,但正确而简单的方法是转到styles
文件并为TextView添加自定义样式,该样式中您可以根据不同的状态并控制TextView
必须提供的所有内容,然后转到您的.xml
文件并添加style属性并加载您刚刚创建的样式,这很容易并且可以重复使用整个应用上,而不是每次需要执行类似操作时都复制粘贴所有代码。
答案 3 :(得分:-1)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_training)
var textview1 = findViewById(R.id.TextView1) as TextView
textview1.setOnClickListener{
val t = TextView(this)
t.setBackground(R.drawable.text)
}
}