ImageView сильно меняет отображение в зависимости от устройства или, возможно, API. Как заставить его отображаться пропорционально размеру экрана устройства?

#java #android #imageview

Вопрос:

Я тестирую свое приложение на нескольких устройствах в эмуляторе Android, и один просмотр изображений может сильно изменить его внешний вид, от очень маленького до очень большого.

Для справки вот как отображается изображение в 5.1 WVGA API 26:

введите описание изображения здесь

Вот как он отображается в Pixel XL API 27:

введите описание изображения здесь

И вот как эмуляторы сравниваются друг с другом, будучи тем, у которого API 26 немного шире и выше, поэтому я не думаю, что должна быть такая большая разница:

введите описание изображения здесь

Изображение получает свою информацию и отображается таким образом:

 byte bytes[] = new byte[0];  try {  bytes = FileUtils.readFileToByteArray(new File(filepath2));  } catch (IOException e) {  e.printStackTrace();  }    Bitmap bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);  ByteArrayOutputStream baos = new ByteArrayOutputStream();  bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);   ImageView imageView=view.findViewById(R.id.imageView13);   imageView.setImageBitmap(bm);  

И вот как я установил изображение в своем фрагменте:

 lt;androidx.constraintlayout.widget.ConstraintLayout  xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"gt;  lt;androidx.appcompat.widget.LinearLayoutCompat  android:id="@ id/linearLayout"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:gravity="bottom"  android:orientation="vertical"  tools:layout_editor_absoluteX="0dp"  tools:layout_editor_absoluteY="0dp"gt;   lt;ImageView  android:id="@ id/imageView13"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center"  android:layout_marginTop="60dp"  android:layout_weight="0.8"  app:layout_constraintTop_toTopOf="parent" /gt;  

Что я могу сделать, чтобы он отображался пропорционально размеру экрана?

Комментарии:

1. Я не думаю,что должна быть большая разница — разрешение WVGA составляет 480×800 (267 PPI), в то время как пиксель XL составляет 1, 440×2, 560 (534 PPI), так что разница на самом деле огромная. Я предполагаю, что проблема связана с использованием wrap_content просмотра изображений. когда jpg не помещается в WVGA, он масштабируется, в то время как в пикселе он занимает все необходимое пространство и не «масштабируется», чтобы соответствовать.