Intellij IDEA / Android स्टूडियो में मर्ज रूट टैग के साथ पूर्वावलोकन लेआउट


158

आइए कल्पना करें कि हम रैखिकलेयआउट पर आधारित यौगिक घटक विकसित कर रहे हैं। तो, हम इस तरह से क्लास बनाते हैं:

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 मर्ज में पूर्वावलोकन टैब हमेशा फ्रेमलेआउट के रूप में कार्य करता है, और हम कुछ ऐसा देखेंगे: मर्ज के साथ पूर्वावलोकन करें

(यह एंड्रॉइड स्टूडियो है, Intellij IDEA सिर्फ एक ही है, ग्रहण के बारे में मुझे नहीं पता है)

लेआउट को बहुत विकसित करने के लिए पूर्वावलोकन करें, यह दुख की बात है कि कुछ लेआउट के लिए भी इतनी बड़ी मदद मिली। यह निर्दिष्ट करने का एक तरीका हो सकता है कि पूर्वावलोकन mergeविशेष लेआउट में टैग की व्याख्या कैसे करें ?


1
मैं इस समर्थन को और भी जोड़ना चाहूंगा।
क्रिस्टोफर पेरी

यह भविष्य में कुछ समय के लिए उपकरण विशेषता द्वारा हल हो सकता है। code.google.com/p/android/issues/detail?id=61652
जोनास

जवाबों:


352

एक नया पेरेंटटैग टूल विशेषता है ( एंड्रॉइड स्टूडियो 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


2
चूँकि आप ऐसे टूल का उपयोग कर रहे हैं जो आप टूल का भी उपयोग कर सकते हैं: लेआउट_हाइट = "माचिस_परेंट"
कटिको

उत्तम! धन्यवाद। +1
कार्सन जे।

66

संपादित करें: पुराना उत्तर। उत्तर देखें starkej2 द्वारा।


Android Studio 0.5.8 ने टूल के लिए समर्थन जोड़ा: showIn। इसका उपयोग करके <मर्ज> लेआउट का पूर्वावलोकन करना संभव है।

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

लेआउट / लेआउट_मेरज। 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
खुशखबरी! यौगिक घटकों के लिए बहुत आसान नहीं है, क्योंकि हमें केवल पूर्वावलोकन के लिए अतिरिक्त लेआउट जोड़ने की आवश्यकता है। लेकिन इससे बेहतर कुछ नहीं।
रात 14:59

कुछ इसी तरह का कोई विचार ग्रहण में समर्थित है?
तोगुड़

3
आप एक Google डेवलपर द्वारा बताए
Neige

मैंने मूल दृश्य (इस मामले में RelativeLayout) में प्रोग्रामिंग के लिए कुछ विशेषताएँ निर्धारित की हैं, जैसे पैडिंग। बेशक वे इस सहायक लेआउट में लागू नहीं हैं (क्योंकि आप पूरी तरह से अन्य दृश्य का उपयोग करते हैं)। एकमात्र समाधान सहायक लेआउट में पूरे कस्टम दृश्य का उपयोग करना था।
फेलिक्स एडलमन

पुराना नहीं होने पर इसका उपयोग नहीं किया जा सकता है जब आप सामान्य दृश्य नहीं चाहते हैं
amorenew

-5

मर्ज के बजाय माता-पिता के रूप में भी कस्टम क्लास का उपयोग संभव है

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

और फिर सीधे इस लेआउट को बढ़ाएँ और परिणाम दृश्य को देखें SomeView। एंड्रॉइड स्टूडियो सीधे पैरेंट क्लास की जांच करेगा SomeViewऔर जैसे पूर्वावलोकन को हैंडल करेगा LinerLayout। आप विचारों को बांधने onFinishInflate()के SomeViewलिए विधि का उपयोग कर सकते हैं findViewById()। इस समाधान का लाभ यह है कि आप सभी लेआउट परिभाषाओं या शैली परिभाषा को सीधे लेआउट फ़ाइल में डाल सकते हैं, आप setOrientation()कोड की तरह विधि का उपयोग नहीं कर सकते ।


2
यह एक अनंत पुनरावृत्ति और स्टैक ओवरफ्लो का परिचय देता है जब पूर्वावलोकन करने की कोशिश करते हुए, पूरे एंड्रॉइड स्टूडियो को हमेशा के लिए लटका दिया जाता है।
Mato
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.