📜  如何在按钮上显示隐藏文本旁边显示图标?(1)

📅  最后修改于: 2023-12-03 15:38:39.989000             🧑  作者: Mango

如何在按钮上显示隐藏文本旁边显示图标?

在实际开发中,我们可能会需要在按钮上显示一些非常重要的文本,但是又不想占用过多的按钮空间。这时,我们可以使用文本的隐藏和一个图标来解决这个问题。

实现思路

我们可以给按钮添加一个图标,然后切换图标的显示和隐藏,从而实现文本的隐藏和显示。

实现步骤
  1. 设置按钮文本和图标

    <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"
        />
    

    这里我们给按钮设置了一个文本“按钮文本”,并在右边添加了一个向下的箭头图标。

  2. 添加点击事件

    Button btnToggleText = findViewById(R.id.btn_toggle_text);
    btnToggleText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            toggleTextAndIcon(btnToggleText);
        }
    });
    

    在点击事件里,我们调用 toggleTextAndIcon 方法来切换文本和图标的显示和隐藏。

  3. 编写切换文本和图标的方法

    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);
    }
}