【问题标题】:How to automaticaly resize view depending the mobile screen size如何根据手机屏幕大小自动调整视图大小
【发布时间】:2018-08-08 17:25:00
【问题描述】:

我正在尝试设计一个 CardView 以在带有 GridLayout 的 RecyclerView 中实现它。我设计了 cardView,但是当我在具有不同屏幕尺寸的不同手机上证明我的设计时,设计不会自行缩放。我使用“dp”统一和“sp”统一,如“Android开发者”页面显示。我不知道我是否必须为每个屏幕尺寸或每个屏幕密度创建设计。

你能帮帮我吗?

代码:

<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

【问题讨论】:

    标签: android view size screen cardview


    【解决方案1】:

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

    这样做

    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);
      

    【讨论】:

    • 如何更改每个屏幕尺寸的尺寸??
    • 您必须为不同的屏幕创建不同的值文件夹。关注这个stackoverflow.com/a/32861248/4972317
    • 但是当我在里面创建带有 dimensions.xml 的文件夹时,为每个尺寸的屏幕附加尺寸的方法是什么?
    • 您不必担心。 Android 会为你做这件事。
    • 你能举个例子吗?
    【解决方案2】:

    您可以将this 库用于spthis 用于所有屏幕尺寸的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:textSize10sdp 作为 android:layout_marginTop 将根据所有屏幕的 dpi 进行调整,适用于所有手机尺寸、平板电脑甚至 Android TV。

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

    【讨论】:

    • 这两个库可以按我的需要工作,但是尝试一些设计时,当我将横向更改为纵向或反之时,调整大小对我不利。为每个视图(横向和纵向)创建不同的布局可能会更好?
    • @ProRiderZ115 是的,您可以为横向布局创建 layout-land 文件夹。
    • @ProRiderZ115 看看这个stackoverflow.com/questions/4572496/…
    【解决方案3】:

    您可以使用 ConstraintLayout 代替 LinearLayout 和约束视图垂直和水平。它会自动兼容不同的屏幕尺寸。

    【讨论】:

      猜你喜欢
      • 2013-11-25
      • 2015-07-16
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2017-01-19
      相关资源
      最近更新 更多