Metin boyutu ve farklı android ekran boyutları


121

Biliyorum, zaten 1000 kez tartışıldı, ancak metin boyutunu farklı ekran boyutları için ayarlayamıyorum. Özel stilimde boyut birimleri olarak 'sp'yi kullanmaya çalışıyorum:

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    ...
    <item name="android:textSize">30sp</item>
    ...
</style>

2.7 QVGA'da iyi görünüyor:

2.7QVGA 30 sp

Ancak 7 inç WSVGA'da şöyle görünür:

7 inç WSVGA 30sp

Aynı sonuçla hem 'sp' hem de 'dp' kullanmayı denedim.

Bu düğmelerin herhangi bir ekranda nasıl aynı görünmesini sağlayacağınızı açıklar mısınız?

Tam özel düğme stili

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">30sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">2</item>
</style>

Ve uygulama temamda var

<item name="android:buttonStyle">@style/CustumButtonStyle</item>

Ve benim düzenim var:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">

<Button
    android:id="@+id/buttonContinue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/buttonNewGame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonContinue"
    android:layout_alignRight="@+id/buttonContinue"
    android:layout_below="@+id/buttonContinue"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/ButtonAbout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonNewGame"
    android:layout_alignRight="@+id/buttonNewGame"
    android:layout_below="@+id/buttonNewGame"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>


Ekranlarınızda aynı görünüyorlar. İzleyici ölçeğinizin% 100 olduğundan emin olun
Dmitry Zaytsev

Yanıtlar:


160

@forselen Sanırım bu Google IO Pdf for Design'ı kontrol etmeniz gerekiyor . Bu pdf'de, farklı android cihazları için dimens.xml'yi nasıl kullanacağınızı bulacağınız Sayfa No: 77'ye gidin Örnek için aşağıdaki yapıya bakın:

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

Örnek için aşağıdaki dimens.xml değerlerinde kullandınız.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">18sp</dimen>
</resources>

Diğer değerler klasöründe, metin boyutunuz için değerleri değiştirmeniz gerekir.

Not: @espinchi tarafından belirtildiği gibi küçük, normal, büyük ve xlarge, Android 3.2'den beri aşağıdakilerin lehine kullanımdan kaldırılmıştır:

Android 3.2 için Tablet Düzenlerini Bildirme

Android 3.0 çalıştıran ilk nesil tabletler için, tablet düzenlerini bildirmenin uygun yolu, bunları xlarge yapılandırma niteleyicisine (örneğin, res / layout-xlarge /) sahip bir dizine koymaktı. Diğer tablet türlerini ve ekran boyutlarını (özellikle 7 inçlik tabletleri) barındırmak için Android 3.2, daha ayrık ekran boyutları için kaynakları belirlemenin yeni bir yolunu sunar. Yeni teknik, düzeninizin ihtiyaç duyduğu alan miktarını temel alır (örneğin 600 dp genişlik), mizanpajınızı genelleştirilmiş boyut gruplarına (büyük veya xlarge gibi) sığdırmaya çalışmak yerine.

Genelleştirilmiş boyut gruplarını kullanırken 7 inçlik tabletler için tasarım yapmanın zor olmasının nedeni, 7 inçlik bir tabletin teknik olarak 5 inçlik bir telefonla (büyük grup) aynı grupta olmasıdır. Bu iki cihaz görünüşte boyut olarak birbirine yakın olsa da , bir uygulamanın kullanıcı arayüzü için alan miktarı, kullanıcı etkileşiminin tarzı gibi önemli ölçüde farklıdır. Bu nedenle, 7 "ve 5" ekran her zaman aynı düzeni kullanmamalıdır. Bunlar için farklı düzenler sağlamanızı mümkün kılmak için iki tür ekran, Android artık düzen kaynaklarınızı, dp birimlerinde belirtilen, uygulamanızın düzeni için gerçekte mevcut olan genişlik ve / veya yüksekliğe göre belirlemenize olanak tanır.

Örneğin, tablet tarzı aygıtlar için kullanmak istediğiniz düzeni tasarladıktan sonra, ekran genişliği 600 dp'den az olduğunda düzenin düzgün çalışmayacağını belirleyebilirsiniz. Böylece bu eşik, tablet düzeniniz için ihtiyaç duyduğunuz minimum boyut olur. Bu nedenle, artık bu düzen kaynaklarının yalnızca uygulamanızın kullanıcı arabirimi için en az 600 dp genişlik olduğunda kullanılması gerektiğini belirtebilirsiniz.

Ya bir genişlik seçmeli ve minimum boyutunuz olarak tasarlamalısınız ya da tamamlandığında düzeninizin desteklediği en küçük genişliğin ne olduğunu test etmelisiniz.

Not: Bu yeni boyutlu API'lerle kullanılan tüm şekillerin yoğunluktan bağımsız piksel (dp) değerleri olduğunu ve mizanpaj boyutlarınızın da her zaman dp birimleri kullanılarak tanımlanması gerektiğini unutmayın, çünkü sizin önemsediğiniz şey sistemden sonra mevcut olan ekran alanı miktarıdır. ekran yoğunluğunu hesaba katar (ham piksel çözünürlüğü kullanmanın aksine). Yoğunluktan bağımsız pikseller hakkında daha fazla bilgi için, bu belgenin önceki kısımlarında bulunan Terimler ve kavramlar bölümünü okuyun. Yeni boyut niteleyicileri kullanma

Düzeniniz için mevcut alana göre belirleyebileceğiniz farklı kaynak konfigürasyonları tablo 2'de özetlenmiştir. Bu yeni niteleyiciler, geleneksel ekran boyutu gruplarına (küçük, normal, normal, vb.) Kıyasla uygulamanızın desteklediği belirli ekran boyutları üzerinde size daha fazla kontrol sunar. büyük ve xlarge).

Not: Bu niteleyicileri kullanarak belirlediğiniz boyutlar gerçek ekran boyutları değildir. Aksine, boyutlar, etkinliğinizin penceresi için mevcut olan dp birimlerindeki genişlik veya yükseklik içindir. Android sistemi, sistem kullanıcı arabirimi için ekranın bir kısmını kullanıyor olabilir (örneğin, ekranın altındaki sistem çubuğu veya üstteki durum çubuğu), bu nedenle ekranın bir kısmı düzeninizde kullanılamayabilir. Bu nedenle, beyan ettiğiniz boyutlar özellikle faaliyetinizin ihtiyaç duyduğu boyutlarla ilgili olmalıdır - sistem, düzeniniz için ne kadar alan sağladığını bildirirken sistem kullanıcı arabirimi tarafından kullanılan herhangi bir alanı hesaba katar. Ayrıca, Eylem Çubuğunun uygulamanızın pencere alanının bir parçası olarak kabul edildiğine dikkat edin, ancak mizanpajınız bunu belirtmiyor, bu nedenle mizanpajınız için mevcut alanı azaltır ve tasarımınızda bunu hesaba katmanız gerekir.

Tablo 2. Ekran boyutu için yeni yapılandırma niteleyicileri (Android 3.2'de kullanıma sunulmuştur). Ekran yapılandırması Niteleyici değerleri Açıklama smallestWidth swdp

Örnekler: sw600dp sw720dp

Kullanılabilir ekran alanının en kısa boyutuyla gösterildiği gibi bir ekranın temel boyutu. Özellikle, aygıtın en küçük Genişliği, ekranın mevcut yüksekliği ve genişliğinin en kısasıdır (bunu ekran için "mümkün olan en küçük genişlik" olarak da düşünebilirsiniz). Ekranın mevcut yönünden bağımsız olarak, uygulamanızın kullanıcı arayüzü için en az dps genişliğe sahip olmasını sağlamak için bu niteleyiciyi kullanabilirsiniz.

Örneğin, düzeniniz en küçük ekran alanı boyutunun her zaman en az 600 dp olmasını gerektiriyorsa, bu niteleyiciyi düzen kaynaklarını, res / layout-sw600dp / oluşturmak için kullanabilirsiniz. Sistem, 600dp tarafının kullanıcı tarafından algılanan yükseklik veya genişlik olup olmadığına bakılmaksızın, bu kaynakları yalnızca mevcut ekranın en küçük boyutu en az 600dp olduğunda kullanacaktır. SmallestWidth, aygıtın sabit bir ekran boyutu özelliğidir; ekranın yönü değiştiğinde cihazın en küçük genişliği değişmez.

Bir cihazın en küçük genişliği, ekran dekorasyonlarını ve sistem kullanıcı arayüzünü dikkate alır. Örneğin, cihaz, ekranda en küçük Genişliğin ekseni boyunca boşluğu hesaba katan bazı kalıcı UI öğelerine sahipse, sistem, en küçük Genişliği gerçek ekran boyutundan daha küçük olarak bildirir çünkü bunlar, kullanıcı arayüzünüz için kullanılamayan ekran pikselleridir.

Bu, kullanıcı arayüzünüz için mevcut olan etkili boyut için ayrı bir sayı tanımlamanıza olanak tanıyan genelleştirilmiş ekran boyutu niteleyicilerine (küçük, normal, büyük, xlarge) bir alternatiftir. Genel ekran boyutunu belirlemek için smallestWidth kullanmak kullanışlıdır, çünkü genişlik genellikle bir düzen tasarlarken itici faktördür. Bir kullanıcı arayüzü genellikle dikey olarak kaydırılır, ancak yatay olarak ihtiyaç duyduğu minimum alan konusunda oldukça katı kısıtlamalara sahiptir. El cihazları için tek bölmeli düzen veya tabletler için çok bölmeli düzen kullanılıp kullanılmayacağının belirlenmesinde mevcut genişlik, aynı zamanda kilit faktördür. Bu nedenle, muhtemelen her cihazda mümkün olan en küçük genişliğin ne olacağına en çok önem veriyorsunuz. Mevcut ekran genişliği wdp

Örnekler: w720dp w1024dp

Değer ile tanımlanan, kaynakların kullanılması gereken dp birimlerinde minimum kullanılabilir genişliği belirtir. Kullanıcı arayüzünüz için kullanılabilen geçerli gerçek genişliği yansıtmak için ekranın yönü yatay ve dikey arasında geçiş yaptığında sistemin karşılık gelen genişlik değeri değişir.

Bu, çok bölmeli bir düzen kullanıp kullanmayacağınızı belirlemede genellikle yararlıdır, çünkü bir tablet cihazda bile, yatay yön için yaptığınız aynı çok bölmeli düzeni dikey yönlendirme için istemezsiniz. Bu nedenle, hem ekran boyutunu hem de yönlendirme niteleyicilerini birlikte kullanmak yerine, düzen için gereken minimum genişliği belirtmek için bunu kullanabilirsiniz. Kullanılabilir ekran yüksekliği hdp

Örnekler: h720dp h1024dp vb.

Değer ile tanımlanan, kaynakların kullanılması gereken dp birimleri cinsinden minimum ekran yüksekliğini belirtir. Kullanıcı arayüzünüz için kullanılabilen geçerli gerçek yüksekliği yansıtmak için ekranın yönü yatay ve dikey arasında geçiş yaptığında sistemin karşılık gelen yüksekliği değişir.

Düzeninizin gerektirdiği yüksekliği tanımlamak için bunu kullanmak, hem ekran boyutunu hem de yönlendirme niteleyicilerini kullanmak yerine wdp'nin gerekli genişliği tanımlamak için olduğu gibi kullanışlıdır. Bununla birlikte, UI'lerin genellikle dikey olarak kaydırıldığı ve bu nedenle ne kadar yüksekliğin mevcut olduğu konusunda daha esnek olduğu, ancak genişliğin daha katı olduğu düşünüldüğünde, çoğu uygulama bu niteleyiciye ihtiyaç duymayacaktır.

Bu niteleyicileri kullanmak, ekran boyutu gruplarını kullanmaktan daha karmaşık görünebilir, ancak kullanıcı arayüzünüzün gereksinimlerini belirledikten sonra aslında daha basit olmalıdır. Kullanıcı arayüzünüzü tasarlarken, muhtemelen ilgilendiğiniz en önemli şey, uygulamanızın ahize tarzı bir kullanıcı arayüzü ile birden fazla bölme kullanan tablet tarzı bir kullanıcı arayüzü arasında geçiş yaptığı gerçek boyuttur. Bu anahtarın kesin noktası, tasarımınıza bağlı olacaktır — belki de tablet düzeniniz için 720dp genişliğe ihtiyacınız var, belki 600dp yeterlidir veya 480dp veya bunların arasında bir sayı olabilir. Tablo 2'deki bu niteleyicileri kullanarak, düzeninizin değişeceği kesin boyutun kontrolü sizdedir.

Bu boyut yapılandırma niteleyicileri hakkında daha fazla tartışma için Kaynak Sağlama belgesine bakın. Yapılandırma örnekleri

Tasarımlarınızdan bazılarını farklı cihaz türleri için hedeflemenize yardımcı olmak üzere, tipik ekran genişlikleri için bazı rakamlar:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7 tablet (600x1024 mdpi).
720dp: a 10 tablet (720x1280 mdpi, 800x1280 mdpi, etc).

Tablo 2'deki boyut belirleyicilerini kullanarak, uygulamanız genişlik ve / veya yükseklik için istediğiniz herhangi bir sayıyı kullanarak el cihazları ve tabletler için farklı düzen kaynaklarınız arasında geçiş yapabilir. Örneğin, tablet mizanpajınız tarafından desteklenen en küçük mevcut genişlik 600dp ise, şu iki düzen grubunu sağlayabilirsiniz:

res / layout / main_activity.xml # El cihazları için res / layout-sw600dp / main_activity.xml # Tabletler için

Bu durumda tablet düzeninin uygulanabilmesi için mevcut ekran alanının en küçük genişliği 600 dp olmalıdır.

Kullanıcı arayüzünüzü 7 ”ve 10” tabletler gibi boyutları ayırt etmek için daha fazla özelleştirmek istediğiniz diğer durumlarda, en küçük ek düzenler tanımlayabilirsiniz:

res / layout / main_activity.xml # El cihazları için (600dp'den küçük mevcut genişlik) res / layout-sw600dp / main_activity.xml # 7 ”tabletler için (600dp genişliğinde ve daha büyük) res / layout-sw720dp / main_activity.xml

10 ”tabletler için (720 dp genişlik ve daha büyük)

Önceki iki örnek kaynak kümesinin, aygıtın geçerli yönüne bakılmaksızın ekranın iki kenarından en küçük olanını belirten "en küçük genişlik" niteleyicisi olan swdp'yi kullandığına dikkat edin. Bu nedenle, swdp kullanmak, ekranın yönünü göz ardı ederek mizanpajınız için mevcut genel ekran boyutunu belirlemenin basit bir yoludur.

Bununla birlikte, bazı durumlarda, düzeniniz için önemli olan, şu anda tam olarak ne kadar genişlik veya yüksekliğin mevcut olduğudur. Örneğin, yan yana iki parçalı iki bölmeli bir düzene sahipseniz, aygıt yatay veya dikey yönde olsun, ekran en az 600 dp genişlik sağladığında bunu kullanmak isteyebilirsiniz. Bu durumda, kaynaklarınız şöyle görünebilir:

res / layout / main_activity.xml # El cihazları için (mevcut genişlik 600dp'den küçük) res / layout-w600dp / main_activity.xml # Çoklu bölme (600dp veya daha fazla genişliğe sahip herhangi bir ekran)

İkinci kümenin "kullanılabilir genişlik" niteleyicisi olan wdp'yi kullandığına dikkat edin. Bu şekilde, bir aygıt, ekranın yönüne bağlı olarak aslında her iki düzeni de kullanabilir (mevcut genişlik bir yönde en az 600 dp ve diğer yönde 600 dp'den azsa).

Mevcut yükseklik sizin için önemliyse, hdp niteleyicisini kullanarak aynısını yapabilirsiniz. Veya, gerçekten spesifik olmanız gerekiyorsa wdp ve hdp niteleyicilerini birleştirin.


7
Bu küçük / normal / büyük / xlarge şu anda kullanımdan kaldırılmıştır (Aralık 2014). Şimdi tercih edilen yol "swxxxdp" kullanmaktır. Bkz developer.android.com/guide/practices/...
espinchi

1
@espinchi teşekkür ederim, bunu da bir cevap olarak göndermelisiniz. Ayrıca önerilen dp'ler var mı? örneğin standartlar şunlardır: 100sw, 200sw, 400sw, 600sw.
Vince V.

19

Sanırım bu konuya cevap vermek için çok geç. Ancak, fark çözümleme cihazları üzerinden metin boyutu sorununu çözme fikrimi veya yolumu paylaşmak istiyorum. Birçok android geliştirici sitesi, metin boyutu için, fark çözünürlüklü cihazlarda metin boyutunu işleyecek sp birimini kullanmamız gerektiğini önermektedir . Ama her zaman istediğim sonucu alamıyorum. Bu yüzden son 4-5 projemden kullandığım bir çözüm buldum ve çalışıyor. Benim önerime göre, her çözünürlük cihazı için metin boyutunu yerleştirmeniz gerekiyor, bu biraz yorucu bir iş, ancak ihtiyacınızı karşılayacaktır. Her geliştirici, 4: 6: 8: 12 (sırasıyla h: xh: xxh: xxxh) gibi oranı dinlemelidir . Şimdi proje res klasörünüzün içinde dimens dosyasıyla 4 klasör oluşturmanız gerekir.

  1. res / değerler hdpi / dimens.xml
  2. res / değerler xhdpi / dimens.xml
  3. res / değerler xxhdpi / dimens.xml
  4. res / değerler xxxhdpi / dimens.xml

Şimdi dimens.xml dosyasının içine metin boyutlarını yerleştirmelisiniz. Sana kodunu gösteriyorum değerler-hdpi benzer diğer çözünürlük değerlerine / dimens.xml dosyası için yer koduna sahiptir.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">4px</dimen>
</resources>

Diğer çözünürlükler için xhdpi : 6px , xxhdpi : 8px, xxxhdpi : 12px gibidir. Bu yukarıda yazdığım oran (3: 4: 6: 8: 12) ile hesaplanır. Diğer metin boyutu örneğini yukarıdaki oranla tartışalım. Hdpi'de 12px metin boyutunu almak istiyorsanız, diğer çözünürlükte

  1. hdpi: 12px
  2. xhdpi: 18px
  3. xxhdpi: 24px
  4. xxxhdpi: 36px

Bu, tüm çözünürlükler için gerekli metin boyutunu uygulamak için basit bir çözümdür. Ben dikkate değilim değerler-mdpi burada çözünürlük cihazlar. Herhangi biri bu çözünürlük için metin boyutunu eklemek isterse, rasyon 3: 4: 6: 8: 12 gibidir . Herhangi bir sorunuz varsa lütfen bana bildirin. Umarım size yardımcı olur.


4
Metin boyutunda sp yerine px kullanmak kötü bir uygulama değil mi? Aşağıdaki oranı px yerine sp kullanarak elde etmenin bir yolu var mı?
Red M

Bunun iyi çalıştığını kontrol ettim ama hala kafam karıştı dp / sp yerine px cinsinden değerler kullanmak iyi bir uygulama mı? Resmi belgelerden piksel değerlerinin kullanılmasını hiç görmedim.
shaby

1
yazı tipi boyutu için sp kullanın, kanun budur. Rahul'un gösterdiği yaklaşım doğru, sadece px yerine sp kullanın.
Mihir Patel

Uygulama yazı tipi boyutunu sistem yazı tipi boyutuna bağlamayı planlıyorsanız sp kullanılmalıdır.Aksi takdirde bu çözüm fena değildir.
Irfan Ul Haq

12

Bazen sadece üç seçeneğe sahip olmak daha iyidir

 style="@android:style/TextAppearance.Small"

Normal ekran boyutundan ayırt etmek için küçük ve büyük kullanın.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Small"/>

Normalde, hiçbir şey belirtmeniz gerekmez.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

Bunu kullanarak, farklı ekran boyutları için boyutları test etmekten ve belirtmekten kaçınabilirsiniz.


10

Aynısını boyuta göre yaptım ve şöyle bir şey boyadım (dp ile ancak yalnızca metin için ve drawText ())

XML:

   <dimen name="text_size">30sp</dimen>

Kod:

   Paint p =new Paint();
       p.setTextSize(getResources().getDimension(R.dimen.text_Size));

8
dpMetin boyutu için KULLANMAMALISINIZ ... spbunun yerine kullanın.
Yousha Aleayoub

metin boyutu için lütfen sp kullanın
Thinsky

Kullanıcı tercihine göre yeniden boyutlandırılmasını istemediğiniz belirli durumlarda dp'yi kullanabilirsiniz.

7

Metin boyutlarını hemen hemen tüm cihaz ekranlarıyla uyumlu hale getirmenin en kolay yolu olan aşağıda belirtilen android kitaplığını herkes kullanabilir. Aslında ekran boyutu için yeni android yapılandırma niteleyicileri temelinde geliştirildi (Android 3.2'de tanıtıldı) SmallestWidth swdp.

https://github.com/intuit/sdp


2
sdp ekran boyutu içindir; metin boyutu için ssp kullan
ecle

Bu benim için çalışıyor, ancak eklenecek çok fazla dosya olduğundan şüpheleniyorum, bu uygulamanın boyutunu artıracak, @Muhammad yeniden boyutlandırabilir ve yalnızca ihtiyaç duyduğunuz sınıfları ekleyebilirsiniz
Kirtikumar A.


0

Her ekran boyutu için birden fazla düzen kaynağı ekleyerek bunu arşivleyebileceğinizi düşünüyorum, örneğin:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size with small text
res/layout-large/my_layout.xml       // layout for large screen size with larger text
res/layout-xlarge/my_layout.xml      // layout for extra large screen size with even larger text
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

Referans: 1. http://developer.android.com/guide/practices/screens_support.html


2
Res / değerler-küçük kullanın daha iyi olabilir.
einverne

1
en kötü uygulamalardan biri. sadece farklı boyutları desteklemek için 5 düzen korumalıyız?
SolidSnake

Varyant ekranlarda metin boyutunu küçültmek için farklı düzenler oluşturmak gerçekten kötü bir fikirdir. Bunu tavsiye etmiyorum
Saman Salehi

0

Yazı tipi boyutu da dahil olmak üzere tüm ekranları aynı öğe boyutlarını gösterecek şekilde birleştirmek için: - Kullanıcı arayüzünü, tasarım sırasında uygun bulduğunuz boyutlarla tek bir ekran boyutunda tasarlayın, yani TextView yazı tipi boyutu, 4'6 inç ile varsayılan ekran boyutunda 14 dp'dir.

  • Diğer telefonların fiziksel ekran boyutunu, yani diğer telefonların / ekranların 5'2 inçini programlı olarak hesaplayın.

  • 2 ekran arasındaki yüzde farkını hesaplamak için bir formül kullanın. yani 4'6 ile 5'2 arasındaki% fark nedir?

  • Yukarıdaki formüle göre 2 Metin Görünümü arasındaki piksel farkını hesaplayın.

  • TextView yazı tipi boyutunun gerçek boyutunu (piksel cinsinden) alın ve piksel farkını (daha önce hesapladığınız) varsayılan yazı tipi boyutuna uygulayın.

Bu şekilde dinamik en boy oranını tüm ekran boyutlarına uygulayabilirsiniz ve sonuç harika olur. Her ekranda aynı düzen ve boyutlara sahip olacaksınız.

İlk başta biraz zor olabilir, ancak formülü çözdüğünüzde hedefe tamamen ulaşır. Bu yöntemle, yalnızca farklı ekran boyutlarına sığdırmak için birden fazla düzen yapmanız gerekmez.


0

Farklı ekranınızı ayarlamak için weightSumve layout_weightözelliğini de kullanabilirsiniz .

Bunun için android:layout_width= 0dp ve android:layout_width= (ne istersen) yapmalısın;



-2

Boyutları kodlamayın.

Esneklik reklamı için yeni ekran çözünürlükleri için - en iyi uygulama textSize elde etmek için düzene sahte TextView yerleştirmektir:

<TextView
        android:id="@+id/dummyTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="TextView" />

Ve örneğin kodunuzda:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView);
float textSize = testTextView.getTextSize();

textSizeSabit veya yüzde boyutu ekleyebileceğiniz bir referans olarak tutun (hesaplayarak).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.