Ответ 1
Ah,
android:adjustViewBounds="true"
Для работы maxWidth требуется .
Работает сейчас!
Итак, у меня есть изображение, которое должно отображать произвольное изображение, изображение профиля, загруженное из Интернета. Я хочу, чтобы ImageView масштабировал свое изображение в соответствии с высотой родительского контейнера и шириной max max 60dip. Однако, если изображение имеет высокое отношение по отношению к размеру и не нуждается в полной ширине ширины 60 пикселей, ширина ImageView должна уменьшаться, чтобы фон фонового изображения плотно прилегал к изображению.
Я пробовал это,
<ImageView android:id="@+id/menu_profile_picture"
android:layout_width="wrap_content"
android:maxWidth="60dip"
android:layout_height="fill_parent"
android:layout_marginLeft="2dip"
android:padding="4dip"
android:scaleType="centerInside"
android:background="@drawable/menubar_button"
android:layout_centerVertical="true"/>
но это сделало ImageView супер большим по какой-то причине, возможно, оно использовало внутреннюю ширину изображения и wrap_content, чтобы установить его - в любом случае, это не соответствовало моему атрибуту maxWidth.. Это работает только в некоторых типах контейнеров? Это в LinearLayout...
Любые предложения?
Ah,
android:adjustViewBounds="true"
Для работы maxWidth требуется .
Работает сейчас!
Настройка adjustViewBounds
не помогает, если вы используете match_parent
, но обходной путь прост. ImageView
:
public class LimitedWidthImageView extends ImageView {
public LimitedWidthImageView(Context context) {
super(context);
}
public LimitedWidthImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LimitedWidthImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int specWidth = MeasureSpec.getSize(widthMeasureSpec);
int maxWidth = getMaxWidth();
if (specWidth > maxWidth) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth,
MeasureSpec.getMode(widthMeasureSpec));
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}