У меня есть относительный макет с 3 ImageViews.Первое - это квадратное изображение, второе - просто для разметки, а третье - другое квадратное изображение.
Вот код XML для этого макета:
<?xml version="1.0" encoding="UTF-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radioSV"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/radioLayout"
android:orientation="vertical"
android:gravity="center">
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:id="@+id/sssImageView"
android:src="@drawable/radio_sss_400_r"
android:layout_width="10sp"
android:layout_height="10sp"
android:layout_gravity="center"
android:scaleType="centerCrop">
</ImageView>
<!-- spacing -->
<ImageView
android:id="@+id/spacing1"
android:background="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="10dip"
android:layout_below="@id/sssImageView">
</ImageView>
<ImageView
android:id="@+id/gaImageView"
android:src="@drawable/radio_ga_400_r"
android:layout_width="10sp"
android:layout_height="10sp"
android:layout_gravity="center"
android:scaleType="centerCrop"
android:layout_below="@id/spacing1">
</ImageView>
</RelativeLayout>
</LinearLayout>
</ScrollView>
ТеперьЯ хочу, чтобы мое приложение было полезным для разных плотностей экрана, поэтому в java-файле я спрашиваю о плотности и позже использую оператор switch-case.В этом утверждении размер (ширина, высота) 2-х ImageViews (sssImageView
и gaImageView
) необходимо изменить.
Например, если плотность экрана высокая, я хочуширина и высота ImageViews должны быть 200sp.Я только что поместил 10sp в xml как «стандартное» значение.
Это часть описания варианта использования для высокой плотности экрана:
case DisplayMetrics.DENSITY_HIGH:
layoutParams = new RelativeLayout.LayoutParams(val_high, val_high);
sssImageView.setLayoutParams(layoutParams);
sssImageView.setMaxHeight(val_high);
sssImageView.setMaxWidth(val_high);
gaImageView.setLayoutParams(layoutParams);
gaImageView.setMaxHeight(val_high);
gaImageView.setMaxWidth(val_high);
break;
Также, val_high
is 200sp:
int val_high = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP, 200, this.getResources().getDisplayMetrics());
Теперь деталь с ImageView sssImageView
работает отлично.Он корректно увеличивает изображение с 10 до 200sp (не волнуйтесь - изначально изображение не 10sp!).Проблема заключается в том, что другой ImageView, gaImageView
, ставит себя поверх sssImageView
и разрушает макет.Если я закомментирую 3 строки с помощью gaImageView
, он будет на своем правильном месте в макете, но все еще будет небольшим (10sp), конечно.
Я также попробовал обратное: закомментировал 3 строкис sssImageView
и только манипулированием gaImageView
.Теперь вершина ImageView (sssImageView
) находится на своем правильном месте и небольшого размера, как и ожидалось.Однако нижний ImageView, gaImageView
, располагается сверху sssImageView
, а не ниже, как написано в файле макета xml.
Что здесь не так?