我正在尝试从textview获取可绘制的ID。但是我无法从textview获取可绘制的ID。因此,我获得了drawable并转换为位图以检查drawable。它适用于png图标。但是我尝试使用VectorDrawable的id我无法检查它。我附上了代码。
private void checkDrawable(int resourceId){
Drawable[] drawables = textView.getCompoundDrawables();
Bitmap bitmap = ((BitmapDrawable)drawables[0] ).getBitmap();
Bitmap bitmap2 = ((BitmapDrawable)textView.getContext().getResources().getDrawable(resourceId)).getBitmap();
return bitmap == bitmap2;
}
此代码运行正常。但是,如果我更改为VectorDrawable,则无法检查。
private void checkDrawable(int resourceId){
Drawable[] drawables = textView.getCompoundDrawables();
VectorDrawable bitmap = ((VectorDrawable)drawables[0]);
VectorDrawable bitmap2 = ((VectorDrawable)textView.getContext().getResources().getDrawable(resourceId));
return bitmap == bitmap2;
}
它返回不同的值。请让我有任何想法在textView中检查VectorDrawable图像。
答案 0 :(得分:0)
我正在尝试从textview获取可绘制的ID。
我将直接解决这个问题。
您可以创建自己的TextView
子类,该子类将在通货膨胀期间解析其AttributeSet
并为您保留此信息。这样您以后可以随时查询它。
public class MyTextView extends AppCompatTextView {
private int drawableLeftId;
private String drawableLeftEntry;
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
for (int i = 0; i < attrs.getAttributeCount(); i++) {
if (attrs.getAttributeName(i).equals("drawableLeft")) {
String attributeValue = attrs.getAttributeValue(i).substring(1);
this.drawableLeftId = Integer.parseInt(attributeValue);
this.drawableLeftEntry = getResources().getResourceEntryName(drawableLeftId);
}
}
}
public int getDrawableLeftId() {
return drawableLeftId;
}
public String getDrawableLeftEntry() {
return drawableLeftEntry;
}
}
现在您可以在布局中使用它:
<com.example.stackoverflow.MyTextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/my_drawable"/>
然后您可以获取ID和名称:
MyTextView text = findViewById(R.id.text);
int drawableLefId = text.getDrawableLeftId(); // 2131165284 (the actual value of R.drawable.my_drawable)
String drawableLeftEntry = text.getDrawableLeftEntry(); // "my_drawable"