Soru & Cevap

Bütün ekran çözünürlüğü ve boyutlarında aynı layout tasarımı

12.09.2014 - 09:35

Hazırladığım bir linear layout dosyası var. Bu layout un görünümünün bütün ekran çözünürlüğü ve ekran boyutlarında aynı olmasını istiyorum.

Bunun için absolute layout dışında bir layout kullanımı ve boyut belirtirken px yerine dp, textSize için sp kullanımı öneriliyor. Ancak 1024x768, 8" boyutlarındaki tabletim için Eclipse IDE'si içinde görünen layout (ana menü) la örneğin 400x800 çözünürlüğündeki (Nexus One, hdpi)  başka bir cihaz için Eclipse'deki görünen aynı olmuyor. Ekte 2 farklı cihaz'ın IDE içindeki görüntüsü ve aşağıda layout kodu var. Neyi yanlış yapıyorum? layout un aynı görünmesi için ne yapmam gerekiyor?

---Layout kodu

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout01"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        
        android:layout_gravity="center"
        android:text="P U Z Z L E"
        android:textSize="30sp" />
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="X-Parça sayısı:"
            android:textSize="30sp"
            android:layout_gravity="center" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:text="4" 
            android:layout_gravity="center"/>
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center">
        <TextView 
            android:id="@+id/textView3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Y-Parça sayısı:"
            android:textSize="30sp" />
        <Button 
            android:id="@+id/button2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft = "30dp"
            android:text="4"/>
        
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center">
        <TextView 
            android:id="@+id/textView4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Parça Numaraları:"
            android:textSize="30sp" />
        <Button 
            android:id="@+id/button3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft = "30dp"
            android:text="Var"/>
        
    </LinearLayout>
    
    <Button 
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="BAŞLA!" />
    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="Hakkında" />
    
    
 

</LinearLayout>

1,213 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user umut_ozden
umut_ozden
04.04.2016 - 06:26

Yukarıdaki layout'un kullanıldığı bir uygulama Google Play Store'da: c o m . u m u x s o f t . p u z z l e olarak mevcut.

picture-18612-1408454496.jpg
selim1123456789
16.09.2014 - 03:05

Bir de benim önerim LinearLayout yerine mümkünse 'RelativeLayout' kullanmanız. Hatta 'GridLayout' ile büyük ekranlarda daha kolay yerleşim yapabiliyorsunuz.

Profile picture for user burhanaksendir
burhanaksendir
16.09.2014 - 12:46

Uygulamanızdaki textviewlere font boyutları vermediğinizde, Android otomatik olarak farklı ekran boyutlarında textview içerisindeki textin boyutunu scale ratioya göre ayarlar. Ancak siz bir TextViewe font boyutu tanımladığınızda, yaşadığınız sorunun çözümü için, bunun scale raito değerlerini  tanımlamanız gerekir.
 

Scale Ratio değerleri şu resimde belirtilmiştir:
Görsel kaldırıldı.
Görsel kaldırıldı.


Örneğin 160dpi gibi orta çözünürlüğe sahip cihazlar (mdpi) için ilgili textviewin  android:textSizeını 20sp olarak ayarladıysanız, hdpi cihazlar için bu değeri  20 * 1.5 = 30 sp olarak ayarlamanız gerekir. Aynı şekilde xhdpi için de 20 * 2 = 40sp olarak ayarlamalısınız. Bu anlattıklarımı layout ve dimens ile hiç uğraşmadan  ve bu bölümde fontsizelar girmeden uygulamanızın onCreateı içerisinde programsal olarak  ayarlayabilirsiniz:

[code]TextView tv =  (TextView ) findViewById (R.id.textView2 );
tv.setTextSize(20 * getResources().getDisplayMetrics().density);[/code]


Ayrıca şu bağlantıdaki farklı ekranlar için tasarım bölümünü incelemenizi öneririm.

Dimens kullanımı ve Scale ratio hakkındaki diğer sorunuz için de şu sayfadan istifade edeceğinizi düşünüyorum.

 

Profile picture for user burhanaksendir
burhanaksendir
13.09.2014 - 12:04

Sorununuzun çözümü için  "res/values/dimens.xml dosyasında scaling ratio  değerlerine göre font boyutlarını ayarlamanız gerekiyor.

Ya da uygulamanızın acitivty'si içerisinde programsal olarak ayarlamalısınız:

[code]
TextView text = new TextView(this);
text.setTextSize(16 * getResources().getDisplayMetrics().density);
[/code]

Umut Özden
14.09.2014 - 10:25
res/values/dimens.xml dosyasını oluşturdum. Bu dosya içinde: ------- 25dp ------- 50dp şeklinde 2 değişik font büyüklüğü tanımladığımı düşünelim. Bu dosya içinde scaling ratio değerine nasıl ulaşabilirim? Bu değere ulaştıktan sonra onu nasıl kullanabilirim? Minimal bir örnek verebilir misiniz?