如何根据手机屏幕尺寸自动调整视图大小
How to automaticaly resize view depending the mobile screen size
我正在尝试设计一个 CardView 以在具有 GridLayout 的 RecyclerView 中实现它。我设计了 cardView,但是当我在具有不同屏幕尺寸的不同手机上证明我的设计时,该设计不会自行缩放。我使用 "dp" unity 和 "sp" unity 就像 "Android developers" 页面 shows.I 不知道我是否必须为每个屏幕尺寸或每个屏幕密度创建一个设计。
你能帮帮我吗?
代码:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:cardCornerRadius="6dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true"
android:id="@+id/dlvsr_CardView">
<LinearLayout
android:layout_width="170dp"
android:layout_height="170dp"
android:orientation="vertical"
android:padding="4dp">
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="30dp"
android:ellipsize="end"
android:maxLines="1"
android:text="Text view tittle"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text view subtittle" />
</LinearLayout>
示例如下:
https://i.stack.imgur.com/nRpBY.png
https://i.stack.imgur.com/scL7K.png
https://i.stack.imgur.com/lrCyZ.png
https://i.stack.imgur.com/REzt7.png
您不必为每个屏幕尺寸创建不同的设计。
但至少你必须为每个屏幕使用不同的尺寸。
这样做
您必须为不同的屏幕创建不同的值文件夹。喜欢
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxhdpi 5.5" 1080x1920 xxhdpi
values-xxxhdpi 5.5" 1440x2560 xxxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
通过右键单击所有 values
文件夹并选择 新建 > 值资源文件 创建一个新的 dimens.xml
文件。写 dimens
作为名字。 (您也可以将其称为 dimen
或 dimensions
。名称并不重要,重要的是它将包含的 dimen
资源类型。)
添加 dimen
名称和值。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_value">16dp</dimen>
</resources>
值可以是 dp
、px
或 sp
。
使用xml
中的值
<TextView
android:padding="@dimen/my_value"
... />
或在代码中
float sizeInPixels = getResources().getDimension(R.dimen.my_value);
您可以使用 ConstraintLayout 代替 LinearLayout 并在垂直和水平方向上约束视图。会自动兼容不同尺寸的屏幕。
您可以对所有屏幕尺寸使用 this library for sp and this 以获得 dp。它具有不同的 dimen.xml,其值对应于不同的 dpi。
这是解决您问题的最简单方法。
将 res->values-> 中的所有 ssp 和 sdp XML 添加到项目中,然后添加到 UI xml像下面这样使用它们。
<android.support.design.widget.TextInputLayout
android:id="@+id/textEmailAddressInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/textView"
android:layout_below="@+id/textView"
android:layout_marginTop="@dimen/_10sdp"
android:textSize="@dimen/_14ssp">
在上面的用法示例中,您可以看到我使用了 14ssp 作为 android:textSize 和 10sdp for android:layout_marginTop 将根据所有屏幕的 dpi 进行调整,这适用于所有手机尺寸、平板电脑和即使有 Android 电视。
如果您需要更多信息,请告诉我。
我正在尝试设计一个 CardView 以在具有 GridLayout 的 RecyclerView 中实现它。我设计了 cardView,但是当我在具有不同屏幕尺寸的不同手机上证明我的设计时,该设计不会自行缩放。我使用 "dp" unity 和 "sp" unity 就像 "Android developers" 页面 shows.I 不知道我是否必须为每个屏幕尺寸或每个屏幕密度创建一个设计。
你能帮帮我吗?
代码:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:cardCornerRadius="6dp"
app:cardElevation="4dp"
app:cardUseCompatPadding="true"
android:id="@+id/dlvsr_CardView">
<LinearLayout
android:layout_width="170dp"
android:layout_height="170dp"
android:orientation="vertical"
android:padding="4dp">
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="30dp"
android:ellipsize="end"
android:maxLines="1"
android:text="Text view tittle"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text view subtittle" />
</LinearLayout>
示例如下:
https://i.stack.imgur.com/nRpBY.png
https://i.stack.imgur.com/scL7K.png
https://i.stack.imgur.com/lrCyZ.png
https://i.stack.imgur.com/REzt7.png
您不必为每个屏幕尺寸创建不同的设计。 但至少你必须为每个屏幕使用不同的尺寸。
这样做
您必须为不同的屏幕创建不同的值文件夹。喜欢
values-sw720dp 10.1” tablet 1280x800 mdpi values-sw600dp 7.0” tablet 1024x600 mdpi values-sw480dp 5.4” 480x854 mdpi values-sw480dp 5.1” 480x800 mdpi values-xxhdpi 5.5" 1080x1920 xxhdpi values-xxxhdpi 5.5" 1440x2560 xxxhdpi values-xhdpi 4.7” 1280x720 xhdpi values-xhdpi 4.65” 720x1280 xhdpi values-hdpi 4.0” 480x800 hdpi values-hdpi 3.7” 480x854 hdpi values-mdpi 3.2” 320x480 mdpi values-ldpi 3.4” 240x432 ldpi values-ldpi 3.3” 240x400 ldpi values-ldpi 2.7” 240x320 ldpi
通过右键单击所有
values
文件夹并选择 新建 > 值资源文件 创建一个新的dimens.xml
文件。写dimens
作为名字。 (您也可以将其称为dimen
或dimensions
。名称并不重要,重要的是它将包含的dimen
资源类型。)添加
dimen
名称和值。<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="my_value">16dp</dimen> </resources>
值可以是
dp
、px
或sp
。使用xml
中的值<TextView android:padding="@dimen/my_value" ... />
或在代码中
float sizeInPixels = getResources().getDimension(R.dimen.my_value);
您可以使用 ConstraintLayout 代替 LinearLayout 并在垂直和水平方向上约束视图。会自动兼容不同尺寸的屏幕。
您可以对所有屏幕尺寸使用 this library for sp and this 以获得 dp。它具有不同的 dimen.xml,其值对应于不同的 dpi。
这是解决您问题的最简单方法。
将 res->values-> 中的所有 ssp 和 sdp XML 添加到项目中,然后添加到 UI xml像下面这样使用它们。
<android.support.design.widget.TextInputLayout
android:id="@+id/textEmailAddressInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/textView"
android:layout_below="@+id/textView"
android:layout_marginTop="@dimen/_10sdp"
android:textSize="@dimen/_14ssp">
在上面的用法示例中,您可以看到我使用了 14ssp 作为 android:textSize 和 10sdp for android:layout_marginTop 将根据所有屏幕的 dpi 进行调整,这适用于所有手机尺寸、平板电脑和即使有 Android 电视。
如果您需要更多信息,请告诉我。