我有一个按钮背景,无论是否按下状态,该背景都会更改可绘制状态。我可以像下面一样更改文本颜色和背景,但是我想更改文本大小。如何在XML方面做到这一点?
drawable / button_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/toggle_pressed" android:state_selected="true" />
<item android:drawable="@drawable/toggle_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/toggle_unpressed" />
</selector>
res / color / src_text:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:state_selected="false" android:color="@color/blue2"/>
<item android:state_pressed="true" android:color="@color/color_concrete"/>
<item android:state_pressed="false" android:state_selected="true"
android:color="@color/color_concrete"/>
<item android:color="@color/blue2" />
</selector>
按钮:
<Button
android:id="@+id/playButton"
android:layout_width="200dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="@{(v)->mainViewModel.playButtonClick(v)}"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/play"
android:textColor="@color/src_text"
android:textSize="40sp"
android:visibility="@{mainViewModel.observableVisibilityPlayButton ? v.VISIBLE : v.GONE}"/>
答案 0 :(得分:0)
由于您正在使用数据绑定,因此您可以创建一个BindingAdapter,如下所示:
@JvmStatic
@BindingAdapter("textSize")
fun bindTextSize(button: Button, size: Int) {
if(button.isPressed())
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}
还要在视图模型(大小)中保留一个MutableLiveData字段,并根据需要更改值。
<Button
textSize="@{mainViewModel.size}
android:id="@+id/playButton"
android:layout_width="200dp"
android:layout_height="70dp"
android:background="@drawable/button_selector"
android:onClick="@{(v)->mainViewModel.playButtonClick(v)}"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/play"
android:textColor="@color/src_text"
android:textSize="40sp"
android:visibility="@{mainViewModel.observableVisibilityPlayButton ? v.VISIBLE : v.GONE}"/>
答案 1 :(得分:0)
您可以创建Button的子类并覆盖onTouch方法
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
// button pressed, change textSize
return true;
case MotionEvent.ACTION_UP:
// button released, revert textSize
return true;
}
return false;
}