Intellij IDEA / Android Studio'da birleştirme kökü etiketi içeren düzeni önizleme


158

Diyelim ki LinearLayout'a dayalı bileşik bileşen geliştiriyoruz. Yani, böyle bir sınıf yaratırız:

public class SomeView extends LinearLayout {
    public SomeView(Context context, AttributeSet attrs) {
        super(context, attrs);

        setOrientation(LinearLayout.VERTICAL);
        View.inflate(context, R.layout.somelayout, this);
    }
}

Biz kullanacağız Eğer LinearLayoutbir kök olarak somelayout.xmlbiz birleştirme etiketini kullanın, böylece biz, ekstra görünüm düzeyine sahip olurlar:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        android:textSize="20sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some other text"/>
</merge>

Ancak IDE birleştirme Önizleme sekmesinde her zaman FrameLayout gibi davranır ve şöyle bir şey göreceğiz: Birleştirmeli önizleme

(Android Studio, Intellij IDEA aynı, Eclipse hakkında bilmiyorum)

Önizleme mizanpajları çok hızlandırır, bazı mizanpajlarda bile böyle büyük bir yardımı kaybetmek üzücüdür. Belirtmek için bir yol olabilir, Önizleme mergeetiketi belirli bir düzende nasıl yorumlamalı ?


1
Bu desteğin de eklendiğini görmek istiyorum.
Christopher Perry

Bu, gelecekte tools özelliği ile çözülebilir. code.google.com/p/android/issues/detail?id=61652
Jonas

Yanıtlar:


352

Birleştirme etiketi için düzen türünü belirtmek için kullanabileceğiniz yeni bir parentTag araçları özniteliği ( Android Studio 2.2'de eklenmiştir ) vardır;

Yani örneğinizi kullanarak:

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:parentTag="LinearLayout"
    tools:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        android:textSize="20sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some other text"/>
</merge>

Not : Düzenin düzenleyicide düzgün görüntülenmesi için hem android:layout_widthve hem android:layout_heightde belirtilmelidir.


1
Özel görünüm etiketinizi başka bir düzen dosyasına eklediğinizde önizlemenin nasıl doğru bir şekilde gösterileceğini bilen var mı? <com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
Arst


2
Araçları kullandığınız için araçları da kullanabilirsiniz: layout_height = "match_parent"
cutiko

Mükemmel! Teşekkürler. +1
Carson

66

Düzenleme: Eski cevap. Starkej2'nin cevabına bakınız.


Android Studio 0.5.8 araçlar için destek ekledi: showIn. Bunu kullanarak <merge> düzenlerini önizlemek mümkündür.

http://tools.android.com/recent/androidstudio058released

layout / layout_merge.xml araçlarla: showIn:

<merge xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   tools:showIn="@layout/simple_relativelayout">

......

</merge>

layout / simple_relativelayout.xml aşağıdakileri içerir:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/layout_merge"/>

</RelativeLayout>

14
İyi haberler! Bileşik bileşenler için çok kullanışlı değil, çünkü sadece önizleme için ekstra düzen eklememiz gerekiyor. Ama hiç yoktan iyidir.
darja

Eclipse'de benzer bir şey hakkında herhangi bir fikir destekleniyor mu?
Toguard

3
Google geliştiricisi tarafından bildirilen bir bileti buradan takip edebilirsiniz: code.google.com/p/android/issues/detail?id=61652
Neige

Kök görünümüne (bu durumda RelativeLayout) programlı olarak dolgu gibi bazı öznitelikler ayarladım. Elbette bu yardımcı düzende uygulanmazlar (çünkü tamamen başka bir görünüm kullanıyorsunuz). Tek çözüm yardımcı düzende tüm özel görünümü kullanmaktı.
Felix Edelmann

modası geçmiş değil, genel görüntüleme istemediğinizde kullanılabilir
amorenew

-5

Birleştirme yerine özel sınıf olarak üst sınıf kullanmak da mümkündür

<com.mycompany.SomeView xmlns:android="http://schemas.android.com/apk/res/android">
...
</com.mycompany.SomeView>

Ardından bu düzeni doğrudan şişirin ve sonuç görünümünü şuraya yayınlayın SomeView. Android stüdyosu doğrudan ana sınıfını kontrol edecek SomeViewve önizleme gibi işleyecektir LinerLayout. Görünümleri ile bağlamak için onFinishInflate()yöntemini kullanabilirsiniz . Bu çözümün faydası, tüm düzen tanımlarını veya stil tanımını doğrudan düzen dosyasına koyabilmenizdir , kodda olduğu gibi yöntemi kullanamazsınız .SomeViewfindViewById()setOrientation()


2
Bu, sonsuz bir özyineleme sunar ve önizleme yapmaya çalışırken yığın taşar ve tüm Android Studio'nun sonsuza kadar askıda kalmasını sağlar.
mato
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.