Android 动态分屏
Android dynamic screen splitting
我想做什么?
Activity 开始时 ImageView
占据屏幕的上 9/10,ListView
占据屏幕底部的 1/10:
随着更多项目添加到 ListView
,比例发生变化,ListView
每个项目的屏幕增加 1/10,ImageView
分别缩小,最多 50:50 比率(之后添加更多项目保持比率固定):
我已经知道的:
静态划分屏幕的最佳做法是使用 LinearLayout
属性 android:weightSum
(和 View
的 android:layout_weight
)。使用 AbsListView.LayoutParams
并结合在 ArrayAdapter
中的某处注册回调,也应该可以动态地实现它。然而,它填充就像滥用静态特征(重量)。此外,我更喜欢连续进行比率之间的转换(使用 属性 动画)。
问题:
我应该更喜欢使用 getWindowManager() .getDefaultDisplay().getHieght();
一次,然后根据需要动态计算比率吗?
关于比例更新回调,除了ArrayAdapter.registerDataSetObserver()
还有其他选择吗?
如果您想始终保持 10% 和 90% 的比例,请使用权重 1 和权重 9。
否则最好编写 xml 代码来检查
我按照你的要求做一些事情:
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 );
我想做什么?
Activity 开始时 ImageView
占据屏幕的上 9/10,ListView
占据屏幕底部的 1/10:
随着更多项目添加到 ListView
,比例发生变化,ListView
每个项目的屏幕增加 1/10,ImageView
分别缩小,最多 50:50 比率(之后添加更多项目保持比率固定):
我已经知道的:
静态划分屏幕的最佳做法是使用 LinearLayout
属性 android:weightSum
(和 View
的 android:layout_weight
)。使用 AbsListView.LayoutParams
并结合在 ArrayAdapter
中的某处注册回调,也应该可以动态地实现它。然而,它填充就像滥用静态特征(重量)。此外,我更喜欢连续进行比率之间的转换(使用 属性 动画)。
问题:
我应该更喜欢使用
getWindowManager() .getDefaultDisplay().getHieght();
一次,然后根据需要动态计算比率吗?关于比例更新回调,除了
ArrayAdapter.registerDataSetObserver()
还有其他选择吗?
如果您想始终保持 10% 和 90% 的比例,请使用权重 1 和权重 9。 否则最好编写 xml 代码来检查
我按照你的要求做一些事情:
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 );