我对android比较新。我想开发一个在2个hpdi设备上工作正常的UI。 例如,让我们说这两个设备
Nexus 9
Nexus 10
如上所示,两者具有不同的屏幕尺寸和不同的分辨率,但密度相同。 我的理解是一个布局应该在两个设备上都能完美地工作,但遗憾的是并非如此。我看到了分歧。有人可以建议我应该做出哪些改变。
添加代码部分(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>
谢谢。
答案 0 :(得分:2)
密度只是布局的一部分。这些器件具有不同的纵横比,因此可用的器件无关像素(dip或dp)不同。
因此,您的可用宽度和高度不同,但确保逻辑屏幕密度相同。
话虽如此,Android的布局相当灵活/适应性强,无论屏幕密度如何。 您的布局可能需要补偿不同的宽度或高度。 正如它可能需要/需要更改由于纵向或横向模式,不同的宽高比(潜在的问题)与这两个设备)有相同的区别。
因此,假设您的布局因hdpi / xhdpi / xxhdpi等而有很大不同,那么您可能不正确。您可能希望在可用的屏幕宽度或类似情况(例如sw720dp)上确定布局,如果需要的话。
话虽如此,您的特定布局问题需要解释您的特定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
,这没有任何意义。