मुझे पता है कि View.getRootView () के साथ रूट व्यू कैसे प्राप्त करें । मैं एक बटन की onClick
घटना से भी देखने में सक्षम हूं जहां तर्क एक दृश्य है । लेकिन मैं कैसे प्राप्त कर सकते हैं दृश्य एक में गतिविधि ?
मुझे पता है कि View.getRootView () के साथ रूट व्यू कैसे प्राप्त करें । मैं एक बटन की onClick
घटना से भी देखने में सक्षम हूं जहां तर्क एक दृश्य है । लेकिन मैं कैसे प्राप्त कर सकते हैं दृश्य एक में गतिविधि ?
जवाबों:
यदि आपको अपनी गतिविधि के रूट दृश्य की आवश्यकता है (ताकि आप वहां अपनी सामग्री जोड़ सकें) उपयोग करें
findViewById(android.R.id.content).getRootView()
यह भी बताया गया कि कुछ उपकरणों पर आपको उपयोग करना होगा
getWindow().getDecorView().findViewById(android.R.id.content)
बजाय।
कृपया ध्यान दें कि जैसा कि Booger ने बताया है, यह कुछ उपकरणों पर नेविगेशन बार (बैक बटन आदि के साथ) के पीछे हो सकता है (लेकिन ऐसा लगता है कि अधिकांश डिवाइस पर ऐसा नहीं है)।
यदि आपको यह देखने की आवश्यकता है कि आपने setContentView()
विधि का उपयोग करके अपनी गतिविधि में जोड़ा है तो जैसा कि pottmeat ने लिखा है आप उपयोग कर सकते हैं
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
लेकिन बेहतर सिर्फ अपने xml लेआउट में इस दृश्य को आईडी सेट करें और इसके बजाय इस आईडी का उपयोग करें।
रूट व्यू प्राप्त करने के लिए मैं इसका उपयोग करता हूं जैसा कि XML फ़ाइल में दिया गया है setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
रूप में अच्छी तरह से शामिल करने के लिए एक रास्ता है ?
मैंने इसे केवल एंड्रॉइड 4.0.3 में परीक्षण किया है:
getWindow().getDecorView().getRootView()
वही दृश्य दें जो हमें मिलता है
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
तथा
getWindow().getDecorView().findViewById(android.R.id.content)
अपने बच्चे को दे रही है
android.widget.FrameLayout@#######
कृपया पुष्टि करें।
कोटलिन में हम इसे थोड़ा छोटा कर सकते हैं:
val rootView = window.decorView.rootView
बस किसी को उकसाना आसान तरीका है:
निम्नलिखित कोड पूरी गतिविधि का एक दृश्य देता है:
View v1 = getWindow().getDecorView().getRootView();
गतिविधि में एक प्रमाणित दृश्य प्राप्त करने के लिए, उदाहरण के लिए गतिविधि के अंदर एक छवि दृश्य, बस उस दृश्य की आईडी जोड़ें, जिसे आप प्राप्त करना चाहते हैं:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
आशा है कि यह किसी की मदद करता है
findViewById(R.id.imageView1);
यदि आप विशिष्ट दृश्य चाहते हैं तो आप केवल गतिविधि पर कॉल कर सकते हैं।
किसी गतिविधि में पहुंच को सरल बनाने के लिए इसका उपयोग करें। तब आप सीधे rootView
गतिविधि से, या उसके activity.rootView
बाहर का उल्लेख कर सकते हैं :
val Activity.rootView get() = window.decorView.rootView
यदि आप स्थिरता के लिए फ़्रैगमेंट के लिए समान जोड़ना चाहते हैं, तो जोड़ें:
val Fragment.rootView get() = view?.rootView
वर्तमान गतिविधि का दृश्य प्राप्त करने के लिए
किसी भी onClick में हमें 'view' मिल रहा होगा, 'view' का उपयोग करके rootView प्राप्त करें।
दृश्य देखें = view.getRootView ();
और टुकड़े में देखें
दृश्य देखें = FragmentClass.getView ();
यदि आप किसी गतिविधि में हैं, तो मान लें कि केवल एक मूल दृश्य है, आप इसे इस तरह प्राप्त कर सकते हैं।
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
फिर आप इसे अपनी वास्तविक कक्षा में डाल सकते हैं
या आप उपयोग कर सकते हैं
getWindow().getDecorView();
ध्यान दें कि इसमें एक्शनबार दृश्य शामिल होगा, आपका दृश्य एक्शनबार दृश्य से नीचे है
Activity
कक्षा में ऐसी कोई विधि नहीं है ।
आप में से जो डेटा बाइंडिंग लाइब्रेरी का उपयोग कर रहे हैं , वर्तमान गतिविधि की जड़ प्राप्त करने के लिए, बस उपयोग करें:
View rootView = dataBinding.getRoot();
और कोटलिन उपयोगकर्ताओं के लिए, यह और भी सरल है:
val rootView = dataBinding.root
यदि आपकी गतिविधि का दृश्य xml (उदा activity_root.xml
) में घोषित किया गया है , तो xml खोलें और मूल दृश्य में एक आईडी निर्दिष्ट करें:
android:id="@+id/root_activity"
अब आपकी कक्षा में, दृश्य का उपयोग करके आयात करें:
import kotlinx.android.synthetic.main.activity_root.root_activity
अब आप root_activity
दृश्य के रूप में उपयोग कर सकते हैं ।
setContentView()
और आपके द्वारा आपूर्ति किया गया दृश्य पहले से ही मूल है। यदि आपको उस दृश्य के हैंडल की आवश्यकता है, तो बस इसे XAML में एक आईडी डालें औरfindViewById()
ठीक हो जाएगा।