如何根据手机屏幕尺寸自动调整视图大小

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

您不必为每个屏幕尺寸创建不同的设计。 但至少你必须为每个屏幕使用不同的尺寸。

这样做

  1. 您必须为不同的屏幕创建不同的值文件夹。喜欢

    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
    
  2. 通过右键单击所有 values 文件夹并选择 新建 > 值资源文件 创建一个新的 dimens.xml 文件。写 dimens 作为名字。 (您也可以将其称为 dimendimensions。名称并不重要,重要的是它将包含的 dimen 资源类型。)

  3. 添加 dimen 名称和值。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen name="my_value">16dp</dimen>
    </resources>
    

    值可以是 dppxsp

  4. 使用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 电视。

如果您需要更多信息,请告诉我。