Intereting Posts
OkHttp Post Body как JSON У кого-нибудь есть какие-то впечатления, подсказки, учебные пособия от разработки для устройств Google Android? Единичное тестирование Room и LiveData Как показать тост в AsyncTask в doInBackground В чем разница между setDisplayHomeAsUpEnabled и setHomeButtonEnabled? В Android, как передать предопределенную поверхность для MediaCodec для кодирования? Android: недопустимое использование SingleClientConnManager: соединение по-прежнему выделено Каковы различия между внутренним хранилищем, внешним хранилищем, SD-картой и съемным хранилищем? Shell ADB дает плохой режим при выполнении chmod (под su) Cursor.getType () для уровня API <11 Как сохранить IntentService, даже когда приложение закрыто? Как мы можем получить уведомление, если у телефона есть доступ в Интернет? FillAfter и fillEnabled не работает в Android-анимации просмотра XML Почему существует разница в магнитных величинах, принятых разными смартфонами? Как установить текущую дату в DatePicker?

Как установить минимальный и максимальный размер для ImageView в Android

Я бы так хотел указать как мин. Ширина / высота и макс. Width / height для ImageView. Изображение должно быть масштабировано для соответствия.

Делая это:

<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="200dp" android:src="@drawable/ic_launcher" /> 

их в. Ширина и высота выполняются так, как должны, но макс. Ширина и высота игнорируются.

Если я установил android: adjustViewBounds = "true":

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitCenter" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="200dp" android:src="@drawable/ic_launcher" /> 

Чем, макс. Ширина и высота выполняются так, как должны, но мин. Ширина и высота игнорируются.

Есть ли способ иметь и то и другое?

Solutions Collecting From Web of "Как установить минимальный и максимальный размер для ImageView в Android"

В конце концов, я создал свое собственное представление, которое расширяет ImageView и перезаписывает onMeasure ():

 public class ResizingImageView extends ImageView { private int mMaxWidth; private int mMaxHeight; public ResizingImageView(Context context) { super(context); } public ResizingImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ResizingImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setMaxWidth(int maxWidth) { super.setMaxWidth(maxWidth); mMaxWidth = maxWidth; } @Override public void setMaxHeight(int maxHeight) { super.setMaxHeight(maxHeight); mMaxHeight = maxHeight; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Drawable drawable = getDrawable(); if (drawable != null) { int wMode = MeasureSpec.getMode(widthMeasureSpec); int hMode = MeasureSpec.getMode(heightMeasureSpec); if (wMode == MeasureSpec.EXACTLY || hMode == MeasureSpec.EXACTLY) { return; } // Calculate the most appropriate size for the view. Take into // account minWidth, minHeight, maxWith, maxHeigh and allowed size // for the view. int maxWidth = wMode == MeasureSpec.AT_MOST ? Math.min(MeasureSpec.getSize(widthMeasureSpec), mMaxWidth) : mMaxWidth; int maxHeight = hMode == MeasureSpec.AT_MOST ? Math.min(MeasureSpec.getSize(heightMeasureSpec), mMaxHeight) : mMaxHeight; int dWidth = Helpers.dipsToPixels(drawable.getIntrinsicWidth()); int dHeight = Helpers.dipsToPixels(drawable.getIntrinsicHeight()); float ratio = ((float) dWidth) / dHeight; int width = Math.min(Math.max(dWidth, getSuggestedMinimumWidth()), maxWidth); int height = (int) (width / ratio); height = Math.min(Math.max(height, getSuggestedMinimumHeight()), maxHeight); width = (int) (height * ratio); if (width > maxWidth) { width = maxWidth; height = (int) (width / ratio); } setMeasuredDimension(width, height); } } } 

Теперь это представление можно использовать так:

 <my.package.ResizingImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="200dp" android:src="@drawable/ic_launcher" /> 

Это работает так, как я хотел, но не должно быть более легкого решения?

  <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:minWidth="150dp" android:minHeight="150dp" > <RelativeLayout android:id="@+id/imageLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" android:layout_gravity="center_vertical" > <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:src="@drawable/trump" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" /> </RelativeLayout> </LinearLayout> 

См. Раздел «Дайте минимальную высоту и ширину в макете контейнера» и поместите параметр adjustViewBounds в Imageview. Таким образом, ваша задача будет выполнена в простых шагах.