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

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>

Image icon neotab_1024x768_ve_nexus_goruntusu.jpg

    0

    Umut Özden

    04 Nisan 2016

    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.

    0

    Selim

    16 Eylül 2014

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

    0

    Burhan Aksendir

    16 Eylül 2014

    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:


    Ö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:

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


    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.

     

    0

    Burhan Aksendir

    13 Eylül 2014

    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:

    
    	TextView text = new TextView(this);
    	text.setTextSize(16 * getResources().getDisplayMetrics().density);
    	

      umut_ozden

      7, 14/09/2014 - 22: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?
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.