我完成了我的小项目的java代码和功能。最后,我检查支持大量的Android设备根据他们的大小。但它失败了。
在研究时,我理解我应该使用sp
用于textizes,dp
用于所有其他参数。布局-xml-通过sp
和dp
存在。但它不像我预期的那样。
我创建了一个新项目。
我的xml; (在ConstraintLayout
)
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="72dp"
android:text="Hello World!"
android:textSize="105sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="144dp"
android:text="Check"
android:textSize="160sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
适用于1080 x 1920 xxhdpi; Click here to see layout
1440 x 2960 hdpi(samsung galaxy s8)Click here to see layout
在星系s8中,元素非常小而且存在问题。我想我误解了一个基本概念。你能清理一下吗?
答案 0 :(得分:0)
你在这里遗漏了一些东西:当你设置android:layout_marginTop="72dp"
时,72dp将在两个布局文件中以相同的方式解释。
解决方案是直接在xml文件中使用维度而不是值。
在这里观看:Node.JS and Apache
希望它有所帮助。
答案 1 :(得分:0)
您必须小心屏幕尺寸和像素密度。
处理所有屏幕尺寸的最佳方法是在ConstraintLayout
中使用weightSum
或LinearLayout
(但会降低UI性能)。这将有助于您在所有屏幕上保持元素的相同位置。
像素密度难以治疗。例如,对于文本大小,我发现使用不同的dimens
文件很有用。
右键单击values
文件夹,然后点击Values resource file
,输入名称dimens
,然后从左侧选择Density
。在那里你可以选择你喜欢的密度。在您创建的每个文件中,您可以使用相同的名称创建文本大小,如下所示:
<dimen name="normal_text_size">15sp</dimen>
每次设置文字大小都会使用此标记。这种方式取决于手机密度,将自动选择适当的文字大小。
您可以阅读ConstraintLayout
here
了解屏幕尺寸here
关于像素密度here