【发布时间】:2017-10-06 04:44:09
【问题描述】:
我有 420 dpi 的手机密度屏幕。但是当我将显示从“正常”更改为“小”或“大”或“更大”时,dpi 值会发生变化。如何设计支持所有屏幕的 UI 以及对应使用哪个限定符。
我在dimens.xml 中使用了绝对值,android 将这些值缩放到相应的密度,但它没有按预期生成正确的用户界面。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/profileCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:elevation="6dp"
cardview:cardCornerRadius="6dp"
cardview:cardElevation="6dp"
cardview:cardPreventCornerOverlap="true"
cardview:cardUseCompatPadding="true"
cardview:contentPadding="0dp"
tools:targetApi="lollipop">
<LinearLayout
android:id="@+id/artistLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<FrameLayout
android:id="@+id/artistCoverLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/youtube_thumbnail_background">
<com.google.android.youtube.player.YouTubeThumbnailView
android:id="@+id/profileCoverThumbnail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:alpha="0.62"/>
<ImageView
android:id="@+id/mCoverImage"
android:layout_width="match_parent"
android:layout_height="160dp"
android:background="@drawable/youtube_thumbnail_background"
android:alpha="0.62" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:background="@null"
android:src="@mipmap/play" />
</FrameLayout>
<LinearLayout
android:id="@+id/artistDetailLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/artistCoverLayout"
android:background="#f9f9f9">
<ImageView
android:id="@+id/profile_image"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignBottom="@id/profileCoverThumbnail"
android:layout_alignParentBottom="true"
android:layout_marginLeft="13dp"
android:layout_marginTop="7dp"
android:src="@mipmap/ic_emp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/profile_image"
android:layout_toRightOf="@+id/profile_image"
android:orientation="vertical">
<TextView
android:id="@+id/profileName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/profileCoverThumbnail"
android:layout_marginLeft="8.9dp"
android:layout_marginTop="7.4dp"
android:layout_toEndOf="@+id/profile_image"
android:layout_toRightOf="@+id/profile_image"
android:text="Name"
android:textColor="@color/artistTitleColor"
android:textSize="18.7sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8.9dp"
android:layout_marginTop="7.4dp"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_location" />
<TextView
android:id="@+id/profileLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="City"
android:textColor="#4a4a4a"
android:textSize="12sp" />
</LinearLayout>
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:rating="3"
android:stepSize="1"
android:maxWidth="8.7dp"
android:layout_marginLeft="8.9dp"
android:layout_marginTop="7.4dp"
android:theme="@style/RatingBar"
style="@style/Widget.AppCompat.RatingBar.Small"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/genreLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/artistDetailLayout"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10.5dp"
android:layout_marginLeft="17.9dp"
android:orientation="horizontal">
<TextView
android:id="@+id/genretitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="8.6dp"
android:layout_marginRight="9dp"
android:text="Genres"
android:textColor="@color/artistTitleColor"
android:textSize="13.3sp" />
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:background="#f2f2f2" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/skillLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/genreLayout"
android:orientation="vertical"
android:weightSum="2"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10.5dp"
android:layout_marginLeft="17.9dp"
android:orientation="horizontal"
android:layout_weight="1">
<TextView
android:id="@+id/skilltitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="9.3dp"
android:layout_marginRight="9dp"
android:text="Skills"
android:textColor="@color/artistTitleColor"
android:textSize="13.3sp" />
<View
android:id="@+id/separatorSkill"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:background="#f2f2f2" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/mVisibilityLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="3dp"
android:paddingTop="3dp"
android:paddingLeft="23dp"
android:paddingRight="14dp"
android:background="#f6f6f6">
<TextView
android:id="@+id/mVisibilityTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Visibility"
android:textSize="16sp"
android:layout_gravity="center_vertical"
android:textColor="#4a4a4a"/>
<android.support.v7.widget.SwitchCompat
android:id="@+id/mVisibilitySwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|right"/>
</FrameLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
【问题讨论】:
-
如果您希望我的建议支持所有屏幕,请避免在任何视图的高度或宽度中设置静态数字,请将此静态数字设置为边距,仅向左填充
-
避免对 UI 使用 dimen.xml 中的硬编码尺寸,而是使用 wrap_content 和 weight 以便 UI 可以在不同设备上相应地缩放。
-
@rajesh 但 UI 未按预期正确对齐,缩放时出现更多空白空间
标签: android android-layout user-interface android-studio