以编程方式更改按钮图像drawableLeft无法在android

时间:2016-06-24 04:37:15

标签: android android-layout button android-drawable android-resources

首先我告诉你关于我页面的Layout。我的Button位于LinearLayout内。我正在使用weightSum以便Button layout_height = "0dp"

现在这是我的Button财产。

<Button
    android:id="@+id/imagebutton_shape_round"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_marginBottom="1dp"
    android:layout_marginLeft="1dp"
    android:layout_marginRight="1dp"
    android:layout_weight="1.0"
    android:background="@color/button_background"
    android:gravity="center"
    android:drawableLeft="@drawable/round"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
     />

我已将Image设置为Button,其名称为round。现在我要设置OnclickListener并更改BackGroundColor }以及Image

 Button imagebutton_shape_round = (Button) findViewById(R.id.imagebutton_shape_round);
           imagebutton_shape_round.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                  if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                     imagebutton_shape_round.setCompoundDrawables(getResources().getDrawable(R.drawable.white_round, getApplicationContext().getTheme()), null, null, null);
                    }
                 else {
                    imagebutton_shape_round.setCompoundDrawables(getResources().getDrawable(R.drawable.white_round), null, null, null);
                    }

              imagebutton_shape_round.setBackgroundColor(ContextCompat.getColor(InventoryActivity.this,R.color.linearlayout_background));
                }
            });

如您所见,我们可以使用此代码设置drawableLeft

Drawable img = getContext().getResources().getDrawable( R.drawable.smiley );
txtVw.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null);

How to programmatically set drawableLeft on Android button?

但我的代码else部分显示getDrawable显示deprecated的原因。

我看到了link

我在If condition getResources().getDrawable(R.drawable.white_round, getApplicationContext().getTheme()), null, null, null))

中使用此功能的原因

但是其他部分不起作用

getResources().getDrawable(R.drawable.white_round), null, null, null);

更新:

而不是使用此

getResources().getDrawable(R.drawable.white_round, getApplicationContext().getTheme())

我使用它以删除If else条件

ContextCompat.getDrawable(InventoryActivity.this,R.drawable.white_round)

现在只有一个问题

当我点击第二个Image时显示不是指单击Image时没有更改。

1 个答案:

答案 0 :(得分:1)

当一个API被弃用时,取而代之的新API很可能总是与旧设备兼容,所以你不需要为Build Version添加任何条件。

我认为您应该尝试将此onClick代码段替换为此代码片段并查看其是否有效

Drawable image = ResourcesCompat.getDrawable(R.drawable.white_round);
int h = image.getIntrinsicHeight();
int w = image.getIntrinsicWidth();
image.setBounds( 0, 0, w, h );
imagebutton_shape_round.setCompoundDrawables(image, null, null, null);
imagebutton_shape_round.setBackgroundColor(ContextCompat.getColor(InventoryActivity.this,R.color.linearlayout_background));