创建覆盖大多数Android设备的布局集

时间:2014-08-04 05:53:55

标签: android android-layout dpi

我正在开发一个客户端希望在所有支持设备上具有相同外观的应用程序。此应用程序将支持以下设备的Android 4.0.3或更高版本。

  • 中高端手机肖像(包括Phablet)
  • 7"平板电脑肖像(与手机相同的布局)
  • 10"平板电脑风景

如果我创建这样的布局

  • 布局(中端手机,高端手机,平板手机和7"平板电脑)
  • layout-sw720dp-land(适用于10"平板电脑)

并定义所有ui维度和

中的drawable
  • values-sw320dp,drawable-sw320dp(大多数中端手机)
  • values-sw360dp,drawable-sw360dp(大部分高端手机)
  • values-sw480dp,drawable-sw480dp(三星Galaxy Mega等一些平板手机)
  • values-sw600dp,drawable-sw600dp(7"数位板)
  • values-sw720dp,drawable-sw720dp(10"数位板)

我的问题是

  1. 会覆盖我提到的所有设备吗?
  2. 值等于值-sw320dp,这是正确的吗?
  3. 像三星Galaxy Tab 2 7"有一个屏幕控制,所以它的dp实际上低于600dp。然后,在我的情况下,它将从sw480dp加载值和drawables,是否正确?
  4. 谢谢。

2 个答案:

答案 0 :(得分:2)

  

这会涵盖我提到的所有设备吗?

从给出的列表中,您似乎 已涵盖所有案例。请注意,根据设备的尺寸/分辨率,设备是手机还是平板电脑没有硬线。以下是Google的general guideline

  

为帮助您针对不同类型的设备定位某些设计,以下是典型屏幕宽度的一些数字:

     
      
  • 320dp:典型的手机屏幕(240x320 ldpi,320x480 mdpi,480x800 hdpi等)。
  •   
  • 480dp:像Streak(480x800 mdpi)这样的tweener平板电脑。
  •   
  • 600dp:7“片剂(600x1024 mdpi)。
  •   
  • 720dp:10英寸平板电脑(720x1280 mdpi,800x1280 mdpi等)。
  •   

  

值等于值-sw320dp,这是正确的吗?

设备将根据其限定符使用最适合的任何资源。如果设备的最小宽度介于320dp-359dp之间,则它将使用/values-sw320dp/drawables-sw320dp中的两种资源。如果它在360dp-479dp之间,它将使用下一个。同时,一般/默认资源应放在/values/drawable中(不含限定符)。


  

像三星Galaxy Tab 2 7“这样的设备有一个屏幕控制所以它的dp   实际上低于600dp。然后,在我的情况下,它将加载值   和sw480dp的drawables,它是否正确?

再次,来自Android developer's guide

  

设备的最小宽度考虑了屏幕装饰和系统UI。例如,如果设备在屏幕上有一些持久性UI元素,这些元素占最小宽度轴的空间,系统声明最小宽度小于实际屏幕尺寸,因为这些是屏幕像素不适用于您的用户界面。

根据该定义,诸如软菜单的系统UI将不包括在计算中。你对这个概念是正确的。


毕竟,您应该使用真实设备/模拟器测试所有布局并查看最终结果。通过使用模拟器,您可以轻松指定配置以进行测试。

答案 1 :(得分:-1)

如果你想设计所有设备,你必须遵循这个规则,

  1. 使用最大LinearLayout。
  2. 使用LinearLayout的weightSum。
  3. 例如,

     <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/top_edit"
            android:weightSum="2" >
    
            <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="left" >
    
                <Button
                    android:id="@+id/star"
                    android:layout_width="@dimen/star_width"
                    android:layout_height="match_parent"
                    android:background="@drawable/star_xml" />
            </RelativeLayout>
    
            <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="right" >
    
                <Button
                    android:id="@+id/more"
                    android:layout_width="@dimen/more_width"
                    android:layout_height="match_parent"
                    android:background="@drawable/more_xml" />
            </RelativeLayout>
        </LinearLayout>