我有一个带有自定义布局的ListView,它由左侧的图像和旁边的两个TextView组成。
由于列表项的高度不应高于图像,我考虑将高度定义为150px,这是图像的大小。
然而,这导致Android Studio向我显示警告。
在这种情况下,设置项目的高度(以像素为单位)被认为是不好的做法,如果是这样,我应该如何解决?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"
tools:text="Text" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:textAppearanceMedium"
tools:text="Text" />
</LinearLayout>
这是我要创建的布局图片:
答案 0 :(得分:1)
设置项目的高度(以像素为单位)被视为不良练习 这个案子?
因为它会阻止Android OS根据不同的2个屏幕的可用空间调整视图的大小
我该如何解决?
使用dp
代替px
px
表示屏幕上的实际像素,因此与小密度屏幕相比,具有更高密度的设备每英寸将具有更多像素,因此在更高密度的屏幕上将以小尺寸显示视图
dp
是显示独立像素,借助以下公式计算
px = dp * (dpi / 160)
一组六个广义密度:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
答案 1 :(得分:1)
您需要不同的图片尺寸support different screens。
例如mdpi是1,0x,hdpi - 1,5x,意思是,如果你的图片大小为mdpi 150px,你需要225px图片用于hdpi。
比ListView的大小为150dp(mdpi为1,0x)。
答案 2 :(得分:1)
从评论继续讨论,您应该修改布局以与其他视图动态协作。在99.999%的时间内使用布局中的像素是不好的做法(但不要引用我的话)。
我建议使用ConstraintLayout
来平整您的层次结构,保留您案例的所有必要方面(包括您图片的1:1比例)。
以下是适合您的布局:
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:textAppearance="?android:textAppearanceLarge"
app:layout_constraintBottom_toTopOf="@+id/subtitle"
app:layout_constraintLeft_toRightOf="@+id/image"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:textAppearance="?android:textAppearanceMedium"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@+id/title"
app:layout_constraintRight_toRightOf="@+id/title"
app:layout_constraintTop_toBottomOf="@+id/title"/>
</android.support.constraint.ConstraintLayout>
如果您无法理解布局,请告诉我。