请帮我解决一个问题。当我将min sdk版本从3(Android 1.5)更改为4(1.6)或更高版本时,虽然我使用dp和sp单位,但所有按钮和textview在多个屏幕上具有相同的大小。为什么会这样?
简单示例(main.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/button"
android:layout_width="300dp"
android:layout_height="300dp"
android:text="OK"
android:layout_centerInParent="true"
/>
</LinearLayout>
来自Google Nexus 7的屏幕截图 http://s019.radikal.ru/i601/1312/fd/e769f6e3a690.png
索尼爱立信Xperia Play的屏幕截图: http://s019.radikal.ru/i600/1312/9d/6b3f580e7503.png
答案 0 :(得分:1)
您应该做的是制作不同的布局文件并将其放在不同的文件夹中(例如layout-sw300dp
,layout-sw400dp
,layout-sw600dp
)。这些将是在不同大小和密度的屏幕上显示的布局。
答案 1 :(得分:1)
1.6 Donut added support for different screen sizes and resolutions:
他们[针对API级别4的应用]被假定为支持不同的屏幕密度和大小。 (除非另有说明,否则假定定位早期版本的应用仅支持中密度正常大小的屏幕)。他们仍然可以使用supports-screens清单标记明确指定屏幕支持。
因此,当您的目标 SDK级别低于4时,您将获得兼容模式,其中dp
和sp
单元实际上没有任何效果。仅当目标水平为4或更高时,才相应地缩放像素。
答案 2 :(得分:1)
根据您的要求为以下文件夹创建dimen.xml
:
values
values-hdpi
values-ldpi
values-mdpi
values-sw600dp
values-sw720dp-land
等...... 以及dimen.xml
的代码,并根据需要提供xxxdp
:
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="button_width">300dp</dimen>
<dimen name="button_height">300dp</dimen>
</resources>
然后在您xml
文件之后:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/button"
android:layout_width="@dimen/button_width"
android:layout_height="@dimen/button_height"
android:text="OK"
android:layout_centerInParent="true" />
</LinearLayout>
FOR PROGRAMMATICY:
这也有效:
getResources().getDisplayMetrics().density;
这会给你:
愿它有用......
...谢谢