📅  最后修改于: 2023-12-03 15:38:39.989000             🧑  作者: Mango
在实际开发中,我们可能会需要在按钮上显示一些非常重要的文本,但是又不想占用过多的按钮空间。这时,我们可以使用文本的隐藏和一个图标来解决这个问题。
我们可以给按钮添加一个图标,然后切换图标的显示和隐藏,从而实现文本的隐藏和显示。
设置按钮文本和图标
<Button
android:id="@+id/btn_toggle_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮文本"
android:drawableRight="@drawable/ic_arrow_drop_down"
/>
这里我们给按钮设置了一个文本“按钮文本”,并在右边添加了一个向下的箭头图标。
添加点击事件
Button btnToggleText = findViewById(R.id.btn_toggle_text);
btnToggleText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggleTextAndIcon(btnToggleText);
}
});
在点击事件里,我们调用 toggleTextAndIcon
方法来切换文本和图标的显示和隐藏。
编写切换文本和图标的方法
private void toggleTextAndIcon(Button button) {
boolean flag = false;
Drawable[] drawables = button.getCompoundDrawables();
for (Drawable drawable : drawables) {
if (drawable != null) {
flag = true;
break;
}
}
if (flag) {
button.setText("按钮文本");
button.setCompoundDrawables(null, null, null, null);
} else {
button.setText("隐藏的文本");
button.setCompoundDrawables(null, null, getResources().getDrawable(R.drawable.ic_arrow_drop_down), null);
}
}
在 toggleTextAndIcon
方法中,我们首先获取按钮中所有的 Drawable
,然后遍历这些 Drawable
,如果不为空,则说明按钮上有图标存在,需要隐藏文本并移除图标;否则说明按钮上没有图标,需要显示隐藏的文本并添加图标。
完整的示例代码如下:
<Button
android:id="@+id/btn_toggle_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮文本"
android:drawableRight="@drawable/ic_arrow_drop_down"
/>
Button btnToggleText = findViewById(R.id.btn_toggle_text);
btnToggleText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
toggleTextAndIcon(btnToggleText);
}
});
...
private void toggleTextAndIcon(Button button) {
boolean flag = false;
Drawable[] drawables = button.getCompoundDrawables();
for (Drawable drawable : drawables) {
if (drawable != null) {
flag = true;
break;
}
}
if (flag) {
button.setText("按钮文本");
button.setCompoundDrawables(null, null, null, null);
} else {
button.setText("隐藏的文本");
button.setCompoundDrawables(null, null, getResources().getDrawable(R.drawable.ic_arrow_drop_down), null);
}
}