私は3つのImageViewで相対レイアウトを持っています。最初の画像は正方形の画像で、2番目の画像はスペーシングに使用され、3番目の画像は別の正方形の画像です。ここでImageViewのサイズをプログラムで変更する
は、そのレイアウトの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つのImageView(sssImageView
およびgaImageView
)のサイズ(幅、高さ)を変更する必要があります。
たとえば、画面の濃度が高い場合、ImageViewの幅と高さを200spにします。私は10spを「標準」値としてxmlに入れました。
これは、高画面密度に使用-case文の一部です:
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
は200spです:
int val_high = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP, 200, this.getResources().getDisplayMetrics());
、完璧に動作sssImageView
ImageViewの持つ部分。それは10spから200spに画像を正しく拡大します(心配しないでください - 画像はもともと10spではありません!)。 問題は、もう1つのImageView、gaImageView
がsssImageView
の上に置かれ、レイアウトが破棄されるという事実です。私がgaImageView
で3行をコメントアウトすると、それはレイアウトの正しい場所にありますが、もちろん小さい(10sp)です。
私はまた、逆の試みをしました:sssImageView
で3行をコメントアウトし、gaImageView
を操作するだけです。 ImageView(sssImageView
)の先頭が正しい場所にあり、期待どおりに小さくなっています。しかし、下部のImageView、gaImageView
は、sssImageView
の上に位置し、xmlレイアウトファイルに書かれているとおりではありません。
ここで何が間違っていますか?
異なる密度の異なるドロアブル/レイアウトを使用するだけではなく、明白な理由があるでしょうか? – Idistic
@Idisticです。しかし、私も画像のサイズを変更しない場合、私のアプリのいくつかの場所のレイアウトが破壊されます。これはその場所の一つです。実際には、私はこれらの2つのImageViewsの画像の3つの異なるサイズを持っていますが、どういうわけか他の濃度でテストすると変更されません。 – eightx2