मैंने इस मुद्दे की जांच की है, जिसमें LayoutInflater डॉक्स का जिक्र है और एक छोटा सा नमूना प्रदर्शन परियोजना स्थापित की है। निम्न ट्यूटोरियल दिखाता है कि लेआउट का उपयोग गतिशील रूप से कैसे किया जाए LayoutInflater।
आरंभ करने से पहले हम देखते हैं कि LayoutInflater.inflate()पैरामीटर क्या दिखते हैं:
- संसाधन : एक XML लेआउट संसाधन को लोड करने के लिए आईडी (जैसे,
R.layout.main_page)
- रूट : उत्पन्न पदानुक्रम (यदि
attachToRootहै true) के माता-पिता होने का वैकल्पिक दृश्य , या बस एक वस्तु है जो LayoutParamsलौटी पदानुक्रम (यदि attachToRootहै false) के मूल के लिए मानों का एक सेट प्रदान करता है ।
संलग्नक : क्या फुलाया गया पदानुक्रम रूट पैरामीटर से जुड़ा होना चाहिए? यदि गलत है, तो रूट का उपयोग केवल LayoutParamsXML में रूट दृश्य के लिए सही उपवर्ग बनाने के लिए किया जाता है ।
रिटर्न : फुलाया पदानुक्रम का मूल दृश्य। अगर जड़ की आपूर्ति की गई थी और attachToRootहै true, तो यह जड़ है; अन्यथा यह फुली हुई XML फ़ाइल की जड़ है।
अब नमूना लेआउट और कोड के लिए।
मुख्य लेआउट ( main.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
इस कंटेनर में जोड़ा गया एक अलग TextView है, जो छोटे लाल वर्ग के रूप में दिखाई देता है यदि लेआउट पैरामीटर सफलतापूर्वक XML ( red.xml) से लागू होते हैं
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="25dp"
android:layout_height="25dp"
android:background="#ff0000"
android:text="red" />
अब LayoutInflaterकॉल मापदंडों के कई रूपों के साथ प्रयोग किया जाता है
public class InflaterTest extends Activity {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup parent = (ViewGroup) findViewById(R.id.container);
// result: layout_height=wrap_content layout_width=match_parent
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view);
// result: layout_height=100 layout_width=100
view = LayoutInflater.from(this).inflate(R.layout.red, null);
parent.addView(view, 100, 100);
// result: layout_height=25dp layout_width=25dp
// view=textView due to attachRoot=false
view = LayoutInflater.from(this).inflate(R.layout.red, parent, false);
parent.addView(view);
// result: layout_height=25dp layout_width=25dp
// parent.addView not necessary as this is already done by attachRoot=true
// view=root due to parent supplied as hierarchy root and attachRoot=true
view = LayoutInflater.from(this).inflate(R.layout.red, parent, true);
}
}
कोड में पैरामीटर भिन्नता के वास्तविक परिणाम प्रलेखित हैं।
SYNOPSIS: कॉलिंग LayoutInflaterबढ़ कॉल करने के लिए जड़ सुराग को निर्दिष्ट एक्सएमएल से लेआउट मानकों की अनदेखी के बिना। रूट के साथ फुलाते हुए कॉल करना समान नहीं है nullऔर attachRoot=trueलेआउट मापदंडों को लोड करता है, लेकिन रूट ऑब्जेक्ट को फिर से लौटाता है, जो लोड किए गए ऑब्जेक्ट में आगे के लेआउट परिवर्तन को रोकता है (जब तक कि आप इसका उपयोग नहीं कर सकते findViewById())। कॉलिंग कन्वेंशन जो आप सबसे अधिक उपयोग करना चाहते हैं, इसलिए यह एक है:
loadedView = LayoutInflater.from(context)
.inflate(R.layout.layout_to_load, parent, false);
लेआउट मुद्दों के साथ मदद करने के लिए, लेआउट इंस्पेक्टर की अत्यधिक अनुशंसा की जाती है।