Как автоматически изменить размер представления в зависимости от размера экрана мобильного устройства

Я пытаюсь разработать CardView для его реализации в RecyclerView с GridLayout. Я разработал 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>

Here are the examples:

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


person ProRiderZ115    schedule 08.08.2018    source источник


Ответы (3)


Вы можете использовать эту библиотеку для sp и это для dp для всех размеров экрана. Он имеет другой файл dimen.xml со значениями, относящимися к разным точкам на дюйм.

Это самое простое решение вашей проблемы.

Добавьте все ssp и sdp XML в свой res->values-> в свой проект, а затем используйте их в 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 для android:layout_marginTop, что будет регулироваться в соответствии с разрешением всего экрана, это будет работать для всех размеров мобильных устройств, планшетов и даже с Android TV.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация об этом.

person Pankaj Mundra    schedule 08.08.2018
comment
эти две библиотеки работают так, как мне нужно, но пробуя некоторые дизайны, когда я меняю альбомную ориентацию на портретную или наоборот, изменение размера мне не подходит. Может быть, для этого лучше создать разные макеты для каждого вида (пейзаж и портрет)? - person ProRiderZ115; 09.08.2018
comment
@ ProRiderZ115 Да, вы можете создать папку layout-land для альбомных макетов. - person Pankaj Mundra; 10.08.2018
comment
@ProRiderZ115 Взгляните на это stackoverflow.com/questions/4572496/ - person Pankaj Mundra; 10.08.2018

Вам не нужно создавать разные дизайны для каждого размера экрана. Но, по крайней мере, вы должны использовать разные размеры для каждого экрана.

Для этого

  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. Создайте новый файл dimens.xml, щелкнув правой кнопкой мыши всю папку values и выбрав Создать > Файл ресурсов Values. Напишите dimens для имени. (Вы также можете назвать его dimen или dimensions. Имя на самом деле не имеет значения, только тип ресурса dimen, который он будет включать.)

  3. Добавьте dimen имя и значение.

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

    Значения могут быть в формате dp, px или sp.

  4. Используйте значение в xml

    <TextView
        android:padding="@dimen/my_value"
        ... />
    

    или в коде

    float sizeInPixels = getResources().getDimension(R.dimen.my_value);
    
person Anisuzzaman Babla    schedule 08.08.2018
comment
Как я могу изменить размер для каждого размера экрана ?? - person ProRiderZ115; 08.08.2018
comment
Вы должны создать папку «Разные значения» для разных экранов. Следуйте этому stackoverflow.com/a/32861248/4972317. - person Anisuzzaman Babla; 08.08.2018
comment
Но когда я создаю папки с размерами.xml внутри, как можно прикрепить размеры для экрана каждого размера? - person ProRiderZ115; 08.08.2018
comment
Вам не нужно беспокоиться об этом. Андроид сделает это за вас. - person Anisuzzaman Babla; 08.08.2018
comment
Не могли бы вы привести пример, пожалуйста? - person ProRiderZ115; 09.08.2018
comment
Android автоматически выберет папку с другим значением для разных размеров экрана. - person Anisuzzaman Babla; 09.08.2018
comment
да, но я не знаю, как правильно создавать папки с правильными именами. Мне это нужно, не могли бы вы помочь? Может быть, в приватном чате, если хотите - person ProRiderZ115; 09.08.2018

Вы можете использовать ConstraintLayout вместо LinearLayout и ограничивать просмотр по вертикали и горизонтали. он будет автоматически совместим с экраном разного размера.

person Mehrdad_75    schedule 08.08.2018