我有一个带有RelativeLayout的XML文件。在这个RelativeLayout中,我有一个ImageView和一个带有大量视图的LinearLayout(代码中没有显示)。
<RelativeLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageViewDemo"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignTop="@+id/imageViewDemo"
android:layout_alignLeft="@+id/imageViewDemo"
android:layout_alignRight="@+id/imageViewDemo"
android:layout_alignBottom="@+id/imageViewDemo"
android:gravity="center"
android:orientation="vertical">
<!-- A lot of stuff -->
</LinearLayout>
</RelativeLayout>
我希望ImageView具有与手机/平板电脑屏幕尺寸相同的宽高比。高度应与父视图匹配,但必须更改宽度以匹配正确的比率。 LinearLayout必须位于ImageView内。我根本找不到合适的解决方案。
答案 0 :(得分:1)
我希望
ImageView
具有与手机/平板电脑屏幕尺寸之比相同的宽高比。
首先,您应该获得手机/平板电脑的屏幕尺寸,以便计算宽高比。
此代码获得比率:
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;
final float screenRatio = ((float)width/(float)height);
高度应该与父视图匹配,但必须更改宽度以匹配正确的比例。
为此,您应该在代码中更改ImageView
的宽度,并在布局中指定高度match_parent
。
此代码可以帮助您更改宽度:
imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int height = imageView.getHeight();
int resultWidth = (int)(height * screenRatio);
ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
layoutParams.width = resultWidth;
imageView.setLayoutParams(layoutParams);
}
});
希望这可以帮到你。