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

Nexus 9


尺寸8.86英寸
分辨率2560x1600
密度xhdpi


Nexus 10


尺寸10.05英寸
分辨率2560x1600
密度xhdpi


如上所示,两者的屏幕尺寸和分辨率不同,但密度相同。
我的理解是,一种布局应该可以在两种设备上完美工作,但不幸的是,情况并非如此。我看到了差异。有人可以建议我应该做什么改变。

在代码(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>


谢谢。

最佳答案

如上所示,两者的屏幕尺寸和分辨率不同,但密度相同。我的理解是,一种布局应该在两种设备上都能正常工作


事实并非如此,您是在这个错误前提之上构建的。简单的说:



  屏幕尺寸不同但密度相同的设备将始终以相同的布局工作


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

  密度不同但屏幕尺寸相似的设备应始终以相同的布局工作


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


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


  
  为不同的屏幕尺寸提供不同的布局
  为不同的屏幕密度提供不同的位图可绘制对象
  


如您所见,没有Provide different layouts for different screen densities,这是您提出问题的前提。那只是您通常不做的事情,如果您使用(并理解)dp则没有任何意义。

10-08 14:00