android 如何根据设备 dpi 设置高度与宽度成比例

How to set height proportional to width according to device dpi in android

我想固定imageview的高度,但要根据不同的设备和dpi。

<ImageView
        android:id="@+id/imgFood"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_no_img" />

到目前为止,我将高度固定为 200dp,但我想保持 1:2 的比例而不是固定大小。我知道 android 适用于 dp,但我无法弄清楚如何保持所有设备的比率。宽度将与父级匹配(适合设备宽度)但高度需要相应更改。

任何idea/suggestion?

您可以像这样动态设置身高。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();

ll.getLayoutParams().height = width/2;
ll.getLayoutParams().width = width;
ll.requestLayout();

您可以使用 layout_weight 属性 在 LinearLayout 中设置视图的高度或宽度比例,例如:

<LinearLayout
    android:weightSum="3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <View
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content" />

    <View
        android:layout_weight="2"
        android:layout_width="0dp"
        android:layout_height="wrap_content" />

</LinearLayout>

这将导致 LinearLayout 的内部 Views 分别占据其宽度的三分之一和三分之二。

否则,如果您必须使用不同的布局,目前无法在 .xml 文件中执行此操作,并且可以选择回退到以编程方式设置大小,就像 Hussnain Azam 的回答(虽然你不必总是要求显示器的大小)。