Android,如何动态更改按钮内的drawable?

时间:2015-09-29 03:42:29

标签: android button click drawable

因此,每次点击按钮时,我都会使用此方法更改按钮中的文本:

final Button button1 = (Button) rootView.findViewById(R.id.inputModeSelector);
    button1.setTag(1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            final int status =(Integer) v.getTag();
            if(status == 1) {
                button1.setText("Pic");

                v.setTag(0); //pause
            } else {
                button1.setText("Text");
                v.setTag(1); //pause
            }

            Toast.makeText(getActivity().getBaseContext(), "Changed Input Type", Toast.LENGTH_SHORT).show();
        }
    });

在按钮的样式中,我有:

android:drawableLeft="@drawable/ic_assignment_white_18dp"

这会放置一个图标来强调文本模式。我的问题是如何将该图标更改为另一个图标以与相机模式一起使用,或者基本上如何设置drawableLeft属性?

2 个答案:

答案 0 :(得分:3)

您可以使用drawableLeft以编程方式设置setCompoundDrawablesWithIntrinsicBounds(),如下所示

button1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.yourdrawable, 0, 0, 0);

请阅读docs了解详情。

答案 1 :(得分:0)

如果要以编程方式设置drawable,则必须使用

button.setCompoundDrawablesWithIntrinsicBounds(int leftDrawableId, int topDrawableId, int rightDrawableId, int bottomDrawableId);

因此,如果要设置drawable left,只需将drawable的id赋予setCompoundDrawablesWithInstrinsicBounds()的相应参数,并将其余部分保留为null或0。 例如:

button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.textIcon, 0, 0, 0);

同样,如果你想设置正确的drawable必须这样做:

button.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.textIcon, 0);