【问题标题】:Sizing in Android layouts?在 Android 布局中调整大小?
【发布时间】:2012-02-20 23:38:37
【问题描述】:
这让我困惑到世界末日。我有一个 480x800 像素的 4.5 英寸屏幕,我不知道屏幕的 DPI 是多少,或者任何屏幕。假设我想这样做:
每个红色框都是从屏幕一侧到另一侧的图片,蓝色框是其他东西(ImageButton 或其他东西)。我怎样才能知道屏幕的 DPI 是多少以及将每张图片设置为多少像素?!这应该很简单,但令人困惑。
【问题讨论】:
标签:
android
xml
eclipse
layout
android-layout
【解决方案1】:
强烈建议您不要对事物的高度和宽度进行硬编码。您的应用程序可能在不同的可能密度上运行,这正是您希望避免手动设置事物大小的确切原因。
相反,您可以使用 wrap_content 和 fill_parent 之类的东西。您可以使用带有 ImageButton 的 LinearLayout 以及其中的所有 ImageView 创建您想要的内容。然后,您可以将 ImaveViews 设置为具有高度 =“wrap_content”和宽度 =“fill_parent”。这样,现在无论您在哪个屏幕上,它们都将始终以全宽和与您正在显示的图片相同的高度显示。
Read about Layouts here 特别注意线性布局部分。
find an example here 开始。
还要考虑一个事实,并非您的应用可能在其上运行的每台设备都与您的设备一样大。除非您希望自己的身高变得太小而无法使用,否则他们中的许多人将没有空间在显示屏上显示 6 行。如果您必须显示这么多行,您还必须将 LinearLayout 包装在 ScrollView 中。
【解决方案2】:
有两种选择:
1.在xml中定义布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="7"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<Button
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="2"
android:text="button"
/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FFF"
/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0FF"
/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#F0F"
/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FF0"
/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#000"
/>
</LinearLayout>
** 2.在代码中定义布局**
这里不赘述,你可以像这样从DisplayMetrics类中获取所有数字:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);