我想做什么?
活动开始于aImageView占据屏幕的上9/10,aListView占据剩余的下1/10:
随着向ListView中添加更多项,比率将发生变化,ListView为每个项获得1/10的屏幕,并且ImageView将分别缩小,达到50:50的比率(之后添加更多项以保持比率不变):
我已经知道:
静态划分屏幕的最佳实践是使用LinearLayout属性android:weightSum(和Viewandroid:layout_weight)。它应该可以动态地使用AbsListView.LayoutParams,并在ArrayAdapter中的某个地方注册回调。然而,它就像是对静态特性(权重)的滥用。此外,我更喜欢连续地在与比率之间进行转换(使用属性动画)。
问题:
我是否应该更喜欢使用getWindowManager() .getDefaultDisplay().getHieght();一次,并根据需要动态计算比率?
关于比率更新回调,除了ArrayAdapter.registerDataSetObserver(),还有其他选项吗?

最佳答案

我做一些你想做的事:
1)设置布局:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/ll_forImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/ll_forList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </ListView>
    </LinearLayout>
</LinearLayout>

2)编写一些实用的布局方法。
private int dpToPx(int dp) {
    return (int) (dp * getResources().getDisplayMetrics().density + 0.5f);
}

private static void setLayoutSize(View view, int width, int height) {
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.width = width;
    params.height = height;
    view.setLayoutParams(params);
}

3)代码:
int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp);
int screenHeight = dpToPx(getResources().getConfiguration().screenHeightDp);
int ratio = ....;//
setLayoutSize(ll_forImage, screenWidth , screenHeight/ratio );
setLayoutSize(ll_forList, screenWidth , screenHeight - screenHeight/ratio );

10-06 10:41
查看更多