为什么按钮在多个屏幕(Android 1.6+)上具有相同的大小?

时间:2013-12-06 11:43:43

标签: android layout textview density-independent-pixel

请帮我解决一个问题。当我将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

3 个答案:

答案 0 :(得分:1)

您应该做的是制作不同的布局文件并将其放在不同的文件夹中(例如layout-sw300dplayout-sw400dplayout-sw600dp)。这些将是在不同大小和密度的屏幕上显示的布局。

答案 1 :(得分:1)

1.6 Donut added support for different screen sizes and resolutions

  

他们[针对API级别4的应用]被假定为支持不同的屏幕密度和大小。 (除非另有说明,否则假定定位早期版本的应用仅支持中密度正常大小的屏幕)。他们仍然可以使用supports-screens清单标记明确指定屏幕支持。

因此,当您的目标 SDK级别低于4时,您将获得兼容模式,其中dpsp单元实际上没有任何效果。仅当目标水平为4或更高时,才相应地缩放像素。

答案 2 :(得分:1)

根据您的要求为以下文件夹创建dimen.xml

  1. values
  2. values-hdpi
  3. values-ldpi
  4. values-mdpi
  5. values-sw600dp
  6. values-sw720dp-land等......
  7. 以及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;
    

    这会给你:

    • 0.75 - ldpi
    • 1.0 - mdpi
    • 1.5 - hdpi
    • 2.0 - xhdpi
    • 3.0 - xxhdpi
    • 4.0 - xxxhdpi

    愿它有用......

    ...谢谢