it-swarm.dev

Android düzenini tüm ekran boyutlarını destekleyecek şekilde nasıl ayarlayabilirim?

Android version2.2'de bir program geliştiriyorum. Birden fazla ekran boyutunu destekleme konusunda birçok belge okudum ancak yine de kafam karıştı. Büyük ve normal ekranları destekleyen bir düzen dosyası tasarladım, küçük ekranla çalışırken düzeni ekrana sığdırmak için ayarlamıyor. Bu kodu da tezahürde kullandım. 

<supports-screens 
        Android:resizeable="true"
        Android:smallScreens="true"
        Android:normalScreens="true"
        Android:largeScreens="true"
        Android:anyDensity="true"
        />

Küçük ekran için görüntü burada. Küçük ekranla uyumlu ekranı nasıl ayarlayabilirim? "Layout-small" klasörünü kullanarak bulduğum bir yerde ama bunu kullanırsam, proje büyüklüğü artıyor, bunu istemiyorum, bu yüzden herhangi biri bana bunu yapmanın en iyi yolunu önerebilir mi?

20
wolverine

Lütfen aşağıdaki linklere bakınız. Bunlar size yardımcı olabilir:

Farklı Ekran Boyutlarını Destekleme

Birden Çok Ekranı Destekleme

Farklı Yoğunlukları Destekleme

Tabletleri ve Ahizeleri Destekleme

AFAIK, tüm ekranları desteklemenin tek yolu bu klasör ayrıcalığını yapmak. Her XML dosyası birkaç kilo bayta kadar çıkar. Öyleyse, boyut böyle bir konuyu çok fazla olmamalıdır. 

17
Ghost

Tüm ekran için çözüm ve tüm düzeni destekleyin.

                  ldpi     mdpi     hdpi     xhdpi     xxhdpi     xxxhdpi
ic_launcher      36x36    48x48    72x72     96x96     144x144    192x192
Notification     18x18    24x24    36x36     48x48     72x72       96x96 
Action Bar & Tab 24*24    32*32    48*48     64*64     96*96      128*128
Background      240x320  320x480  480x800   720x1280   1080x1920  1440X2560

Çizilebilir Klasör:

res/drawable        (default)
res/drawable-ldpi/  (240x320 and nearer resolution)
res/drawable-mdpi/  (320x480 and nearer resolution)
res/drawable-hdpi/  (480x800, 540x960 and nearer resolution)
res/drawable-xhdpi/  (720x1280 - Samsung S3, Micromax Canvas HD etc)
res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6Edge).


ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi

Düzen:

layout-large-mdpi   (1024x600)
layout-large-tvdpi  (800x1280)
layout-large-xhdpi  (1200x1920)
layout-xlarge-mdpi  (1280x800)
layout-xlarge-xhdpi (2560x1600)

        res/layout/activity_main.xml # For handsets (smaller than 600dp available width)
        res/layout-sw600dp/activity_main.xml # For 7 inches tablets (600dp wide and bigger)
        res/layout-sw720dp/activity_main.xml # For 10 inches tablets (720dp wide and bigger)

OR
res/layout/layout #this is the default
res/layout/layout-large  #for 7 inches tablet and images from res/drawable-mdpi/xyz.png
res/layout/layout-xlarge  #for 10 inches tablet

Linklere bakınız:

Farklı çözünürlük desteği Android

https://developer.Android.com/guide/practices/screens_support.html

https://design.google.com/devices/

Tüm Android tabanlı telefonlar ve tabletler için ekran çözünürlükleri listesi var mı?

http://www.emirweb.com/ScreenDeviceStatistics.php

Android telefonlarda en popüler ekran boyutları/çözünürlükleri

28

Evet, probleminize kür aldım, haklısın şahsen ben her ekran çözünürlüğü için düzenler yapmanın zaman alacağınızı ve proje büyüklüğünüzü artıracağını düşünüyorum.

Tüm ekran çözünürlüğüne uyan bir düzen oluşturmak için kendi tekniğimi uyguladım, yani yüzde cinsinden width ve height ayarını yaptım

ProblemViews/Layouts parametresini bazı sabit genişlik veya height değeri ile ayarladığımızda meydana gelir, 100dp.

Solution oldukça basit: match_parent öğesini kullanmaya çalışın, böylece görünüm boş alanı doldurur veya weight kullanır ve her View öğesini diğer Views ile ilişkilendirerek tanımlar. hemen hemen her ekran çözünürlüğünde ve çalışma zamanında, yalnızca Perde cinsinden width veya height sabitlerinin bulunduğu Views/Layouts öğelerinin LayoutParams değerlerini ayarlayın.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <LinearLayout
        Android:id="@+id/mLayout"
        Android:layout_width="280px"
        Android:layout_height="300px" />


</RelativeLayout>

Notice: Sabit boyutlu düzen için width/height için px kullandım çünkü LayoutParams layoutParams = new LayoutParams(int width, int height); işlevinde width ve heightpiksel olarak değer alıyor

İşte bir örnek kod

final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver();

    mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
    {

        @Override
        public void onGlobalLayout() 
        {
            DisplayMetrics metrics = getResources().getDisplayMetrics();

            int deviceWidth = metrics.widthPixels;

            int deviceHeight = metrics.heightPixels;

            float widthInPercentage =  ( (float) 280 / 320 )  * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution

            float heightInPercentage =  ( (float) 300 / 480 ) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage

            int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 );

            int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );

            LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight);

            mLayout.setLayoutParams(layoutParams);
        }
    });

Sanırım herhangi biri hala derhal sormanız için yardıma ihtiyaç duyuyorsa, kodun yeterince açıklayıcı olduğunu düşünüyorum.

Sonuç:Views/Layouts'niz için bazı genişlik/yükseklik değerlerini ayarlamanız gerekirse, her zaman mizanpaj dosyasında px değerini her zaman ayarlayın ve ardından programlı olarak LayoutParams olarak ayarlayın.

Öneri: Sanırım Google Android Guysdp/dip birimlerini percentage ile değiştirmeyi ciddi olarak düşünmeli.

9
Muhammad Babar

Şimdi farklı ekran boyutunu desteklemek daha kolay! Yeni boyut birimi SDP kullanın.

SDP - ölçeklenebilir bir boyut birimi

Yeni bir boyut birimi sağlayan bir Android SDK - sdp (ölçeklenebilir dp). Bu boyut birimi, ekran boyutuyla ölçeklenir. Birden fazla ekranı destekleyen Android geliştiricilerine yardımcı olabilir.

metin görünümleri için lütfen metinler için sp boyutu birimini temel alan ssp adresine bakın.

https://github.com/intuit/sdp

1
Kamil Ibadov

Ölçeklenebilir DP (sdp) kullanılacak en iyi çözümdür. Widget'leri yeniden boyutlandıracak ekran boyutuna bağlıdır. Bunu farklı metin boyutları için metin için de uygulayabiliriz.

Projenize sdp eklemek için (Android Studio ve Gradle Kullanarak):

build.gradle bağımlılıkları bloğunuza ' com.intuit.sdp: sdp-Android: 1.0.5 ' uygulamasını ekleyin. 

for example:
dependencies {'com.intuit.sdp:sdp-Android:1.0.5' }
0
Unknown

bunu dene

<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent">

<ImageView
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    app:layout_constraintDimensionRatio="1:1"
    Android:scaleType="fitXY"
    Android:adjustViewBounds="true"
    Android:src="@drawable/myimage"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"/>
0
DEVSHK