Intereting Posts

Android ImageButton – определить, какой ресурс установлен в данный момент

Есть ли способ, с помощью которого я могу найти, какой ресурс задан для определенного объекта ImageButton в любой момент?

Например, у меня есть ImageButton, который я установил в R.drawable.btn_on onCreate. Позже, в какой-то момент, ImageButton получает значение R.drawable.btn_off . Я хочу проверить, на какой ресурс установлен ImageButton в моем коде.

Спасибо Крису

Solutions Collecting From Web of "Android ImageButton – определить, какой ресурс установлен в данный момент"

Просто используйте setTag() и getTag() для связи и получения пользовательских данных для вашего ImageView .

Вы можете определить свой собственный класс как дочерний ImageButton , добавить приватную переменную int и установить ее, когда setImageResource(int) . Что-то вроде:

 public class MyImageButton extends ImageButton { private int mImageResource = 0; @Override public void setImageResource (int resId) { mImageResource = resId; super.setImageResource(resId); } public int getImageResource() { return mImageResource; } } 

Я не тестировал его, но вы поняли, что вы можете вызвать getImageResource () на своей кнопке, если предположить, что он был предварительно установлен с помощью setImageResource ().

Я не знаю, как напрямую обращаться к ресурсу, но для чего вы пытаетесь достичь, не достаточно ли просто получить состояние?

  ImageButton btn = (ImageButton) findViewById(R.id.btn); int [] states = btn.getDrawableState(); for (int i : states) { if (i == android.R.attr.state_pressed) { Log.v("btn", "Button in pressed state"); } } 

http://developer.android.com/reference/android/R.attr.html#state_pressed

Документация по документам Android неверна. Здесь он указывает, что pickDropPoint.getDrawableState()[android.R.attr.state_pressed] возвращает true или false , но вместо этого возвращает 1 или 0 , **int** .

Я должен был сделать следующее, чтобы заставить его работать

  <ImageButton android:id="@+id/pickDropPoint" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="6" android:background="#EEeeeee4" android:contentDescription="pick or drop point" android:src="@drawable/pickupdrop" /> 

Выбираемый xml для нажатия

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:src="@drawable/start32" android:state_pressed="true"/> <item android:src="@drawable/end32" android:state_pressed="false"/> <corners android:bottomLeftRadius="3dp" android:bottomRightRadius="3dp" android:topLeftRadius="3dp" android:topRightRadius="3dp" /> </selector> 

В коде вам не нужен цикл for, предложенный @slup

 whichPoint = (pickDropPoint.getDrawableState()[android.R.attr.state_pressed] > 1 ? PICKUP : DROP);