我有3個ImageViews的相對佈局。第一個是方形圖像,第二個僅用於間距,第三個是另一個方形圖像。以編程方式更改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文件,我問的密度和使用之後的開關盒聲明。在此聲明中,必須更改2個ImageView(sssImageView
和gaImageView
)的尺寸(寬度,高度)。
例如,如果屏幕的密度很高,我希望ImageViews的寬度和高度爲200sp。我只是把xsp中的10sp作爲「標準」值。
這對於高屏幕密度使用-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());
現在,隨着ImageView的sssImageView
部分完美的作品。它正確地將圖像從10sp放大到200sp(不要擔心 - 圖像最初不是10sp!)。 問題是其他ImageView gaImageView
將其自身置於sssImageView
之上並銷燬佈局的事實。如果我用gaImageView
註釋掉3行,它在佈局中的正確位置,但當然仍然很小(10sp)。
我也嘗試了相反的做法:用sssImageView
註釋掉3行並且只操作gaImageView
。現在,頂級ImageView(sssImageView
)位於正確的位置,並且與預期的一樣小。但是,ImageView的底部gaImageView
定位在sssImageView
之上,而不是像xml佈局文件中所寫的那樣。
這裏有什麼問題?
冒着說明顯而易見的原因,爲什麼不對不同的密度使用不同的drawable /佈局? – Idistic
@我很喜歡。但是如果我不改變圖像的大小,我的應用程序中某些地方的佈局就會被破壞。這是其中的一個地方。實際上,對於這2個ImageViews的圖像,我有3種不同的尺寸,但是在其他密度測試時,它們不會改變。 – eightx2