मैं कुछ दिनों से कोशिश कर रहा हूं कि अपने स्तर को और अधिक कुशल बनाने के लिए नेस्टेड के कई स्तरों का उपयोग करके परिवर्तित कर दिया LinearLayouts
गया है RelativeLayout
और कुछ समस्याओं का सामना करना पड़ा है, जिनके लिए मुझे वर्कअराउंड नहीं मिल रहा है ...
मैंने एंड्रॉइड शुरुआती समूह और इस साइट को खोजा है और मुझे ऐसा कुछ भी नहीं मिला है जो समस्या को हल करने में मेरी मदद करे।
मैंने एक ब्लॉग पर पढ़ा है कि आप मर्ज के साथ लेआउट को जोड़ सकते हैं और टैग शामिल कर सकते हैं। तो मेरे पास जो है वह एक मुख्य RelativeLayout
तत्व के साथ एक मुख्य लेआउट फ़ाइल है। उसके अंदर मेरे पास 5 टैग शामिल हैं जो 5 अलग-अलग xml लेआउट फ़ाइलों को संदर्भित करते हैं, जिनमें से प्रत्येक में रूट के लिए एक मर्ज तत्व है (मेरी मर्ज फ़ाइलों में से सभी में आईडी के अलावा समान हैं)।
मैं दो समस्याओं में भाग रहा हूं, जिन्हें मैं अपने लेआउट कोड के सरलीकृत संस्करण को पोस्ट करने के बाद समझाऊंगा:
नमूना मुख्य लेआउट फ़ाइल:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
नमूना में मर्ज फ़ाइल शामिल है:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
मैं दो समस्याओं में भाग रहा हूं:
1) android:layout_*
शामिल टैग में उपयोग किए जाने पर विशेषताओं को अनदेखा किया जाता है और सभी मर्ज किए गए लेआउट एक दूसरे के शीर्ष पर प्रदर्शित होते हैं। इस पोस्ट के अनुसार ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) "किसी भी android:layout_*
विशेषता का उपयोग <include />
टैग के साथ किया जा सकता है "
2) चूंकि मुझे यह काम नहीं मिला, इसलिए मैंने प्रत्येक मर्ज लेआउट फ़ाइल में android:layout_below
पहले TextView
आइटम में एक विशेषता जोड़ने की कोशिश करने का फैसला किया , जिसका अर्थ है कि प्रत्येक मर्ज फ़ाइल किसी अन्य मर्ज लेआउट फ़ाइल से एक आईडी संदर्भित कर रही होगी ... अधिकांश भाग के लिए वास्तव में काम किया और मेरा लेआउट ठीक लग रहा है। हालाँकि, मुझे एक android:layout_below
विशेषता पर यह कहते हुए एक त्रुटि मिलती है कि यह मेरे द्वारा निर्दिष्ट आईडी को नहीं ढूंढ सकती है ... मेरे पास यह सुनिश्चित करने के लिए आईडी को डबल और ट्रिपल चेक किया गया है कि वे सही थे। सबसे अजीब हिस्सा यह है कि मैंने AutoFill
पहली बार में विशेषता में आईडी डालने के लिए सुविधा का उपयोग किया ।
अगर किसी के पास कोई सुझाव या वर्कअराउंड है तो मैं उन्हें आज़माने से ज्यादा खुश रहूंगा। इसके अलावा, अगर कोई भी मेरे लिए 5 के बजाय सिर्फ एक मर्ज xml लेआउट फाइल करने के लिए एक तरीका सोच सकता है जो बहुत सराहना की जाएगी। मुझे ऐसा करने का कोई तरीका नहीं मिला क्योंकि मुझे रन-वे पर मर्ज लेआउट फ़ाइलों में प्रत्येक आइटम तक पहुंचने की आवश्यकता है ...