SORU
13 NİSAN 2010, Salı


Android XML Layout'In '' Etiketi vardır Gerçekten İşe yarıyor mu?

≪include> kullanırken öznitelikleri geçersiz kılmak için kuramıyorum; benim Android düzeni dosyaları. Böcekler için aradığımda, Issue 2863 Reddedilen buldum:

< . p ^"etiketi (geçersiz parametreler düzeni asla işe yaramaz) kırık vardır"

Romain bu test paketleri ve örnekler çalıştığını gösterir beri, bir şeyi yanlış yapıyor olmalıyım.

Projemi bu şekilde organize edilmiştir:

res/layout
  buttons.xml

res/layout-land
  receipt.xml

res/layout-port
  receipt.xml

Bu buttons.xml böyle bir şey varsa:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

  <Button .../>

  <Button .../>
</LinearLayout>

Ve dikey ve yatay receipt.xml files gibi bir şey:

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

  ...

  <!-- Overridden attributes never work. Nor do attributes like
       the red background, which is specified here. -->
  <include
      android:id="@ id/buttons_override"
      android:background="#ff0000"
      android:layout_width="fill_parent"
      layout="@layout/buttons"/>

</LinearLayout>

Neyi kaçırıyorum?

CEVAP
13 NİSAN 2010, Salı


Ben sorunu buldum. İlk olarak, yalnızca bu plan işe yaramaz bu yüzden layout_* öznitelikleri geçersiz kılar. Bu belgelenmiş davranışı ve benim için bir gözetim basitçe.

Asıl sorun layoutinflater.java bulunur:

// We try to load the layout params set in the <include /> tag. If
// they don't exist, we will rely on the layout params set in the
// included XML file.
// During a layoutparams generation, a runtime exception is thrown
// if either layout_width or layout_height is missing. We catch
// this exception and set localParams accordingly: true means we
// successfully loaded layout params from the <include /> tag,
// false means we need to rely on the included layout params.
ViewGroup.LayoutParams params = null;
try {
   params = group.generateLayoutParams(attrs);
} catch (RuntimeException e) {
   params = group.generateLayoutParams(childAttrs);
} finally {
   if (params != null) {
     view.setLayoutParams(params);
   }
}

≪include> etiketi içermezher ikisi deve layout_height, RuntimeException ve sessizce, herhangi bir günlük ifadesi olmadan bile ele oluşur. layout_width.

Çözüm her zaman kullanırken hem layout_width ve layout_height vardır ve eğer layout_* niteliklerden herhangi birini geçersiz kılmak isterseniz lt;include > etiketi.

Benim örnek olarak değiştirmeniz gerekir:

<include
      android:id="@ id/buttons_override"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      layout="@layout/buttons"/>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DavideoDesign

    DavideoDesig

    24 NİSAN 2006
  • Google Россия

    Google Ро

    9 Temmuz 2007
  • KSI

    KSI

    25 Temmuz 2009