Я хочу реализовать собственный ImageView с некоторыми предопределенными атрибутами на основе файла xml. Для этого я подготовил макет, заключенный в тег merge
:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/my_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:src="@drawable/icon" />
</merge>
И расширенный класс ImageVie
w:
public class CustomImageView extends LinearLayout{
public ImageFormField(Context context) {
super(context);
init();
}
public ImageFormField(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public ImageFormField(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public ImageFormField(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
View.inflate(getContext(), R.layout.custom_image_view, this);
}
}
Пока это работает, но на самом деле мне не нужен этот LinearLayout
, так как я мог бы расширить его непосредственно из ImageView
. Расширяя ImageView
, я хотел бы иметь возможность переопределить параметр src
из макета по умолчанию.
Поэтому я удалил тег merge
, чтобы в макете было только ImageView
, и попробовал это:
public class CustomImageView extends AppCompatImageView{
public ImageFormField(Context context) {
super(context);
init();
}
public ImageFormField(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public ImageFormField(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
View.inflate(getContext(), R.layout.custom_image_view, null); //can't pass root here
}
}
... но изображение просто не отображается. Я хочу иметь возможность использовать свое представление следующим образом:
<com.my.package.CustomImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
с возможностью переопределения атрибута src
. Есть ли способ сделать это, раздувая макет, или мне нужно углубляться в атрибуты (включая пользовательские)?
ОБНОВЛЕНИЕ Под «переопределением атрибута src
» я подразумеваю, что по умолчанию изображение будет иметь источник из своего XML-файла, но пользователь может использовать его таким образом, чтобы передать другое значение в этом пользовательском представлении:
<com.my.package.CustomImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/another_icon" />