针对hdpi

时间:2016-04-08 19:22:05

标签: android android-layout

我对android比较新。我想开发一个在2个hpdi设备上工作正常的UI。 例如,让我们说这两个设备

Nexus 9

  1. 尺寸8.86“
  2. 第2560x1600号决议
  3. 密度xhdpi
  4. Nexus 10

    1. 尺寸10.05“
    2. 第2560x1600号决议
    3. 密度xhdpi
    4. 如上所示,两者具有不同的屏幕尺寸和不同的分辨率,但密度相同。 我的理解是一个布局应该在两个设备上都能完美地工作,但遗憾的是并非如此。我看到了分歧。有人可以建议我应该做出哪些改变。

      添加代码部分(xml),这会给我一个问题。

      <RelativeLayout
                                      android:id="@+id/rl1"
                                      android:layout_width="0dp"
                                      android:layout_height="match_parent"
                                      android:layout_weight="0.2" >
      
                                      <customSeekBar
                                          android:id="@+id/abc1"
                                          android:layout_width="wrap_content"
                                          android:layout_height="300dp"
                                          android:layout_marginTop="40dp"
                                          android:thumb="@drawable/eqthumb"
                                          android:progressDrawable="@drawable/progress_eq"
                                          android:max="19"
                                          android:progress="10" />
      
                                      <TextView
                                          android:id="@+id/abc2 "
                                          android:layout_width="fill_parent"
                                          android:layout_height="wrap_content"
                                          android:layout_alignParentLeft="true"
                                          android:layout_alignParentRight="true"
                                          android:layout_alignTop="@+id/ abc1"
                                          android:textColor="#FFFFFFFF"
                                          android:layout_marginTop="-10dp"
                                          android:textStyle="bold"
                                          android:text="300"
                                          android:singleLine="true"
                                          android:ellipsize="marquee"
                                          android:textAppearance="?android:attr/textAppearanceSmall" />
      
                                      <TextView
                                          android:id="@+id/abc3"
                                          android:layout_width="wrap_content"
                                          android:layout_height="wrap_content"
                                          android:layout_alignParentLeft="true"
                                          android:layout_below="@+id/ abc1"
                                          android:text="0 dB"
                                          android:textColor="#FFFFFFFF"
                                          android:textStyle="bold"
                                          android:singleLine="true"
                                          android:layout_marginTop="-5dp"
                                          android:ellipsize="marquee"
                                          android:textAppearance="?android:attr/textAppearanceSmall" />
                                  </RelativeLayout>
      

      谢谢。

2 个答案:

答案 0 :(得分:2)

密度只是布局的一部分。这些器件具有不同的纵横比,因此可用的器件无关像素(dip或dp)不同。

因此,您的可用宽度和高度不同,但确保逻辑屏幕密度相同。

话虽如此,Android的布局相当灵活/适应性强,无论屏幕密度如何。 您的布局可能需要补偿不同的宽度或高度。 正如它可能需要/需要更改由于纵向或横向模式,不同的宽高比(潜在的问题)与这两个设备)有相同的区别。

因此,假设您的布局因hdpi / xhdpi / xxhdpi等而有很大不同,那么您可能不正确。您可能希望在可用的屏幕宽度或类似情况(例如sw720dp)上确定布局,如果需要的话。

  • Nexus 9的逻辑屏幕密度为:1024 x 768 dip
  • Nexus 10的逻辑屏幕密度为:1280 x 800 dip

话虽如此,您的特定布局问题需要解释您的特定xml布局。对于许多布局,这两个设备应该看起来一样。

注意:您的设备数据已关闭。 Nexus 9的像素为2048 x 1536,宽高比为4:3,相比Nexus 10为16:10。虽然资源限定符等,但两者都属于xhdpi桶。物理屏幕密度为288适用于Nexus 9的Nexus 9和300。

答案 1 :(得分:1)

  

如上所示,两者具有不同的屏幕尺寸和不同的分辨率,但密度相同。我的理解是一个布局应该在两个设备上都能完美运行

事实并非如此,你正在建立在这个错误前提之上。简单地说:

  •   

    具有不同屏幕尺寸但密度相同的设备将始终使用相同的布局

    错误:不同的屏幕尺寸(以英寸为单位)意味着您可能需要调整视图。因此,提供不同的布局,或至少不同的尺寸。

  •   

    具有不同密度但屏幕尺寸相似的设备应始终使用相同的布局

    True :如果屏幕尺寸相同,40dp按钮将覆盖两个设备中相同的屏幕部分。这是因为dp密度无关的像素,并允许我们使用单个值处理所有密度。

我建议您阅读此official resource,这应该让您清醒。在第一个项目符号列表中,我们读到:

  
      
  • 为不同的屏幕尺寸提供不同的布局

  •   
  • 为不同的屏幕密度提供不同的位图可绘制

  •   

正如您所见,没有Provide different layouts for different screen densities,这是您提问的前提。这通常是你做不到的事情,如果你使用(和理解)dp,这没有任何意义。