2016-04-04 15 views
0

Maalesef bu soruyu daha önce sorulmuş olup olmadığını, bu durumda, bir arama ile bulmak zor oldu ama burada biz gitmek:Android DP sınırı

Android Studio DP pikselleri kullandığınızda, Bazen öğelerin önizlemeyle karşılaştırıldığında gerçek bir aygıtta veya taklitçide daha geniş veya kısa olduğunu fark eder. Bu, farklı yoğunluklar göz önüne alındığında mantıklıdır.

Şaşırtıcı olan şey, yükseklik ve/veya genişlik açısından belirli bir altın limit varsa, tüm içeriği bu sınırlar içinde tutarsanız hiçbir şey ekran dışında olmayacağını garanti eder. Cihazın ekran yoğunluğu. Örneğin, bir satranç tahtası yapmak istiyorsam, mümkün olduğunca geniş olmasını, ancak her zaman ekrana sığmasını istiyorum. Burada altın bir limit var mı?

cevap

-1

Ekranın ne kadar büyük olduğunu asla bilemediğiniz için mutlak değerleri kullanmayın. Uygulamaya bildirilen dp'yi seçmek için Uygulamalar da vardır.
Örneğinizle gidelim. Satranç tahtasınız için bir View Cell olabilir. (Ben sadece ilk satırı göstermek Yukarıdaki örnekte)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="8"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     android:weightSum="8"> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/white" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/black" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/white" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/black" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/white" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/black" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/white" /> 

     <View 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:background="@android:color/black" /> 

    </LinearLayout> 

    ... 

Bu aşağıdaki sonucu verecek: Ardından (View yerine Cell arasında kullanılır) bir LinearLayout onları hizaya olabilir

Sample image

Gördüğünüz gibi, herhangi bir mutlak değer kullanmadan, ekran mükemmel şekilde kullanılır (Kök Görünümde match_parent kullanılmıştır). Tabii ki, bunu belirli ihtiyaçlarınız için değiştirebilirsin, çünkü muhtemelen daha fazla Görüntüyü buraya koymak isteyeceksiniz.

Not: Bunu gerçekte böyle yapma. Örnekte iç içe ağırlıkları kullanıyorum, bunlar performans açısından kötü. Bu sadece nasıl yapılacağına dair bir fikir edinmeniz içindir.

+0

İpucu için teşekkürler, ancak DP mutlak bir değer değil, değil mi? 160 dpi ekrana göre. Yani, eğer doğru şekilde görüntülesem, herhangi bir ekrana sığmasını sağlayan belirli bir limit olmalıdır (diyelim ki, sadece 800 dp yüksekliğinde, 300 dp genişliğinde). Çözümünüz gerçekten işe yarayacak, ancak ağırlıklar performans açısından kötü ise, daha iyi bir alternatif nedir? – OhDannyBoy

+0

Ekran daha küçükse ne olur? Bu çok varsayımsaldır, ancak böyle cihazlar olabilir (çok düşük bütçe veya akıllı saatler). Sorun şu ki * bilmiyorsun *. Ayrıca dp kullanımı, düzenin her yerde aynı görüneceğini garanti etmez. Bu kullanıcı için çok kafa karıştırıcı olabilir. Ancak, her ekranda çalışmayı garanti etmese de iyi görünebilecek bir değer bulabilirsiniz. – rubengees

+0

İç içe ağırlıklar olmadan bir LinearLayout yerine bir destek kitaplığı olarak PercentLayout'u kullanabilirsiniz. Veya düzeni her bir Hücre için doğru genişlik ve yükseklik hesaplayarak, koddan dinamik olarak oluşturun. Özel bir görünüm yazmanızı öneririm, bu da tam olarak istediğiniz şeyi yapar. – rubengees