2012-02-06 17 views
18

Dondurma Sandviçinde Holo Dialog temasını kullanan etkinliklerle (@android:style/Theme.Holo.Dialog) biraz garip bir sorunla karşılaştım.ICS Holo Dialog temasının nesi var?

Düzenlerini görmezden geliyor ve XML düzenlerinden düzen genişliği ve yüksekliği yerine tüm ekranı dolduruyorlar. Aynı düzenler Honeycomb'da beklendiği gibi çalışıyor, ancak Ice Cream Sandwich'de değil.

Örnek:

doğru şekilde (Petek) enter image description here

Her iki cihaz enter image description here uygulamanın aynı sürümünü çalıştıran (Dondurma Sandviç) hatalı bir şekilde, ve aynı düzeni kullanıyorlar. İşte söz konusu düzen:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" 
    android:layout_width="940dp" 
    android:layout_height="600dp" 
    android:layout_margin="10dp" > 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="940dp" 
     android:layout_height="600dp" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:smoothScrollbar="true" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
    </GridView> 

</LinearLayout> 

Bunun nasıl çözülebileceğine dair herhangi bir fikir var mı? Benzer bir sorun, yükseklik ve genişlik için match_parent etiketini tamamen yok sayan ICS tabanlı Galaxy Nexus'umda gerçekleşir. İletişim teması ICS'de bozuk mu?

Güncelleme: Ben biraz daha test yaptık ve bunun "doğru" bir görünüm üretecek genişlikte veya daha az 894dp gibi görünüyor, ama ben genişliği ayarlarsanız 895dp veya

daha, bu yanlış bir görünüm olacaksın. Emülatör aynı şekilde davranıyor. Bu yüzden sonunda iletişim tema düştü ve yerine tam genişlikli standart tema düzenini kullanılan, bunun için bir cevap kendim bulamadık

enter image description here

+0

Bu garip görünüyor. Bu karanlıkta bir çekimdir, ancak bazen Uygulama Hedefini değiştirdikten sonra uygulamanızda tuhaf grafik hataları yaşayacağım. Neden olduğu hakkında hiçbir fikrim yok ama projeyi temizlemek onları her zaman düzeltir. Dediğim gibi, karanlıkta vuruldu, ama bu kadar basit olabilir. – adneal

+0

Teşekkürler, sadece bunu denedim, ancak herhangi bir etkisi yok gibi görünüyor. Sadece sorumu tekrar güncelledim - 894 ile 895 dp arasında bir genişlik gibi görünüyor. –

+0

Ekran fotoğraflarınız iki ayrı cihaz kullanılarak çekiliyor mu? Gönderiniz, bu davranışın her zaman HoneyComb üzerinde doğru bir şekilde çalıştığını, ancak ICS'de olmadığını varsayar, ancak yaşadığınız sorunun tamamen ekranın boyutuna bağlı olması olası mıdır? Değilse, o zaman aynı ekran boyutu ile iki AVD (bir çalışan 3.0 ve başka çalışan 4.0) oluşturmayı düşünebilirsiniz ve sorunun aslında Android SDK sürüm numarasına bağlı olup olmadığını belirlemek için iki ile test edebilirsiniz. –

cevap

6

ICS'nin diyalogları teşvik etmediğinin doğru olduğunu düşünmüyorum. Gerçekten de, bütün bir page at Android Design var. Gerçek olan DialogFragment (Android Support library numaralı telefon hattında bile olsa), Dialog modelinin üzerinde tercih edilir.

Tam ekrana açılan iletişim kutusuyla ilgili gözleminizi destekliyorum, ancak davranış aygıttan kaynaklanıyor. Xoom tabletimde, 915dp'de, 895'de değil. Galaxy Nexus'umda 444dp'de oluyor. Ve benim Galaxy Tab 10.1'de, hiç olmaz.

Kaynağa kazarsanız, daha küçük ekranlar için Holo'dan gelen ve daha büyük olanlar için Holo.Dialog.FixedSize'dan gelen bir İletişim Kutusu temasının olduğunu görebilirsiniz. Bunun ekran boyutuna değil, düzen boyutuna göre olmasını beklerdim, belki de yanılmış olurdum. Atlamanın nedenini anlamaya çalışacağım.

+0

Teşekkür ederim, mükemmel olurdu! Holo.Dialog.FixedSize temasını bile bilmiyordum. –

+0

Aynı sorunu görüyorum: Theme.Holo.Light kullanarak temalı bir etkinlik. Dialog.NoActionBar teması, JellyBean'da doğru bir şekilde davranıyor ancak ICS üzerinde 'aşırı boyut' konusuna sahip. –

1

... son derece garip. Bence ICS diyalogların kullanımını teşvik ediyor, belki de bu yüzden değişti.

0

Android'in tüm sürümleri, bir Diyalog temalı düzeninin xml genişliğini/yüksekliğini yoksayar.

çağırdıktan sonra Bunu düzeltmek için:

setContentView(R.layout.contacts_preferences); 

bir satır ekleyin: ihtiyaçlarınız için

getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 

veya WRAP_CONTENT.

+0

Hayır, yapmadılar. Dediğim gibi, Honeycomb'ta iyi çalışıyor. –

0

LinearLayout'unuzu RelativeLayout için değiştirmeyi deneyin. Bu hile yapacaktır :) Bir şekilde LinearLayouts her zaman bir iletişim kutusunda görüntülendiğinde ekranı doldurur. RelativeLayouts yapma.