แสดงตัวอย่างเค้าโครงด้วยการผสานแท็กรูทใน Intellij IDEA / Android Studio


158

ลองจินตนาการว่าเรากำลังพัฒนาส่วนประกอบเชิงซ้อนโดยใช้ LinearLayout ดังนั้นเราจึงสร้างคลาสดังนี้:

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

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

หากเราจะใช้LinearLayoutเป็นรูทของsomelayout.xmlเราจะมีระดับมุมมองเพิ่มเติมดังนั้นเราจึงใช้แท็กผสาน:

<?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>

แต่ในแท็บดูตัวอย่างในการผสาน IDE จะทำหน้าที่เป็น FrameLayout เสมอและเราจะเห็นสิ่งต่อไปนี้: ดูตัวอย่างด้วยการผสาน

(มันเป็น Android Studio, Intellij IDEA ก็เหมือนกัน, เกี่ยวกับ Eclipse ฉันไม่รู้)

ดูตัวอย่างเร่งความเร็วการพัฒนาเลย์เอาต์มันเป็นเรื่องน่าเศร้าที่สูญเสียความช่วยเหลือที่ยอดเยี่ยมแม้แต่ในบางเลย์เอาต์ อาจมีวิธีการระบุวิธีดูตัวอย่างควรตีความmergeแท็กในรูปแบบเฉพาะหรือไม่


1
ฉันต้องการที่จะเห็นการสนับสนุนนี้เพิ่มเช่นกัน
Christopher Perry

นี่อาจแก้ไขได้ในอนาคตโดยแอตทริบิวต์ tools code.google.com/p/android/issues/detail?id=61652
Jonas

คำตอบ:


352

มีคุณลักษณะเครื่องมือ parentTag ใหม่ ( เพิ่มใน Android Studio 2.2 ) ที่คุณสามารถใช้เพื่อระบุประเภทเค้าโครงสำหรับแท็กผสานซึ่งจะทำให้การแสดงผลเค้าโครงถูกต้องในการแสดงตัวอย่างตัวแก้ไขโครงร่าง

ดังนั้นใช้ตัวอย่างของคุณ:

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

หมายเหตุ : ทั้งสองandroid:layout_widthและandroid:layout_heightต้องระบุเพื่อให้โครงร่างแสดงอย่างถูกต้องในตัวแก้ไข


1
ไม่มีใครรู้วิธีแสดงตัวอย่างอย่างถูกต้องเมื่อคุณเพิ่มแท็กมุมมองที่กำหนดเองในไฟล์เลย์เอาต์อื่นหรือไม่ <com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
Arst

1
ดูความแตกต่างของภาพraw.githubusercontent.com/nisrulz/android-tips-tricks/develop/ …
Zar E Ahmer

2
เนื่องจากคุณกำลังใช้เครื่องมือคุณสามารถใช้เครื่องมือต่าง ๆ เช่น: layout_height = "match_parent"
cutiko

ที่สมบูรณ์แบบ! ขอบคุณ +1
Carson J.

66

แก้ไข: คำตอบที่ล้าสมัย ดูคำตอบโดย starkej2


Android Studio 0.5.8 เพิ่มการรองรับเครื่องมือ: showIn โดยใช้มันเป็นไปได้ที่จะแสดงตัวอย่างรูปแบบ <ผสาน>

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

layout / layout_merge.xml พร้อมเครื่องมือ: 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>

เค้าโครง / simple_relativelayout.xml พร้อมกับ:

<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
ข่าวดี! ไม่ค่อยมีประโยชน์สำหรับส่วนประกอบแบบผสมเนื่องจากเราจำเป็นต้องเพิ่มเลย์เอาต์พิเศษเพื่อดูตัวอย่างเท่านั้น แต่ดีกว่าไม่มีอะไร
darja

ความคิดเกี่ยวกับสิ่งที่คล้ายกันได้รับการสนับสนุนใน Eclipse หรือไม่
Toguard

3
คุณสามารถติดตามตั๋วได้รับการรายงานโดยนักพัฒนาของ Google ที่นี่: code.google.com/p/android/issues/detail?id=61652
Neige

ฉันตั้งค่าคุณลักษณะบางอย่างให้กับมุมมองรูท (ในกรณีนี้ RelativeLayout) โดยทางโปรแกรมเช่นการแพ็ดดิง แน่นอนว่าไม่ได้ใช้กับรูปแบบตัวช่วยนี้ (เพราะคุณใช้มุมมองอื่นอย่างสมบูรณ์) ทางออกเดียวคือการใช้มุมมองที่กำหนดเองทั้งหมดในเค้าโครงผู้ช่วย
เฟลิกซ์ Edelmann

ไม่ล้าสมัยมันสามารถใช้เมื่อคุณไม่ต้องการรับชมทั่วไป
amorenew

-5

ยังสามารถใช้คลาสที่กำหนดเองเป็นพาเรนต์แทนการรวมเช่น

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

SomeViewและจากนั้นขยายโดยตรงรูปแบบและผลหล่อนี้มุมมองในการ Android สตูดิโอโดยตรงจะตรวจสอบระดับผู้ปกครองของและดูตัวอย่างการจัดการเช่นSomeView LinerLayoutคุณสามารถใช้onFinishInflate()วิธีการในมุมมองโดยผูกSomeView findViewById()ข้อดีของการแก้ปัญหานี้คือคุณสามารถใส่คำจำกัดความของเลย์เอาต์หรือคำจำกัดความของสไตล์ทั้งหมดลงในไฟล์เลย์เอาต์โดยตรงคุณไม่สามารถใช้วิธีเช่นเดียวกับsetOrientation()ในโค้ด


2
สิ่งนี้แนะนำการเรียกซ้ำแบบไม่สิ้นสุดและสแต็คล้นเมื่อพยายามดูตัวอย่างทำให้ทั้ง Android Studio หยุดทำงานชั่วคราว
mato
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.