वर्तमान गतिविधि से मूल दृश्य प्राप्त करें


633

मुझे पता है कि View.getRootView () के साथ रूट व्यू कैसे प्राप्त करें । मैं एक बटन की onClickघटना से भी देखने में सक्षम हूं जहां तर्क एक दृश्य है । लेकिन मैं कैसे प्राप्त कर सकते हैं दृश्य एक में गतिविधि ?


3
गतिविधि में, आमतौर पर आप यह बताते हैं कि किस संसाधन का उपयोग करके इसे प्रस्तुत करना चाहिए setContentView()और आपके द्वारा आपूर्ति किया गया दृश्य पहले से ही मूल है। यदि आपको उस दृश्य के हैंडल की आवश्यकता है, तो बस इसे XAML में एक आईडी डालें और findViewById()ठीक हो जाएगा।
xandy

मेरी योजना कोड को गतिशील रूप से संलग्न करना है .. इसलिए यदि मेरे उपयोगकर्ता एपीआई का उपयोग करते हैं तो मुझे उम्मीद है कि यह स्वचालित रूप से चीजों का पता लगाने के लिए होगा .. बोल्डर के समाधान काम करता है!
ललित

4
@xandy: एक मामूली टाइपो: XAML -> एक्सएमएल।
सुपरजोस

जवाबों:


1048

यदि आपको अपनी गतिविधि के रूट दृश्य की आवश्यकता है (ताकि आप वहां अपनी सामग्री जोड़ सकें) उपयोग करें

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 लेआउट में इस दृश्य को आईडी सेट करें और इसके बजाय इस आईडी का उपयोग करें।


194
वास्तव में सिर्फ findViewById (android.R.id.content) मुझे रूट दृश्य दे रहा है। अगर यह कुछ मामलों में सही नहीं है, तो मैं findViewById (android.R.id.content) .getRootView () से मूल दृश्य प्राप्त कर सकता हूं। जवाब के लिए धन्यवाद। मैं Android.R सामान के बारे में और अधिक कहाँ जान सकता हूँ? मुझे इसकी जानकारी नहीं थी।
ललित

4
आप यहां देख सकते हैं कि मुझे लगता है कि डेवलपर .android.com/reference/android /R.html यह केवल Android संसाधनों का संदर्भ है। व्यक्तिगत रूप से मैंने android.R.id.content के बारे में सीखा और फिर hierarchyviewer में लेआउट की जाँच की।
दिमित्री रयदेंको

14
मैंने देखा है कि यह दृश्य स्थिति पट्टी को शामिल करता प्रतीत होता है, इसलिए यदि आप अपनी गतिविधि के दृश्य भाग को देख रहे हैं, तो @pottedTeat से उत्तर का उपयोग करें।
बेन क्लेटन

5
@ लिलिथ, क्या आप इस बारे में विस्तार से बता सकते हैं कि जब आपको findViewById (android.R.id .content) .getRootView () करने की आवश्यकता थी? एक सामान्य नियम वास्तव में जानना उपयोगी होगा।
बैटब्रेट

2
@batbrat मुझे एंड्रॉइड 5.0+ में .getRootView () का उपयोग करने की आवश्यकता है जब एक्शन बार का उपयोग करते हुए
मोर्टन होल्मगार्ड

264

रूट व्यू प्राप्त करने के लिए मैं इसका उपयोग करता हूं जैसा कि XML फ़ाइल में दिया गया है setContentView:

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

33
इस उत्तर ने स्थिति पट्टी के बिना वह दृश्य दिया - जो मैं चाहता था। मैं गतिविधि के दृश्य भाग की पिक्सेल चौड़ाई + ऊँचाई की तलाश कर रहा था। यह एक काम करता है, धन्यवाद!
बेन क्लेटन

9
यह ActionBar को बाहर करता है!
वेन

4
वहाँ के ActionBarरूप में अच्छी तरह से शामिल करने के लिए एक रास्ता है ?
theblang

3
यहाँ मुख्य शब्द "एक्सएमएल फ़ाइल में पाए गए मूल दृश्य" हैं। धन्यवाद।
केसी २

3
यह सही चिह्नित उत्तर होना चाहिए। यह स्नैकबार को आपकी गतिविधि (रूट पर) के अंदर रखेगा, जहां यह होना चाहिए (मुझे पूरा यकीन है कि कोई भी उनकी जानकारी को नव बटनों के पीछे नहीं रखना चाहता)
बूगीर

136

मैंने इसे केवल एंड्रॉइड 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@#######

कृपया पुष्टि करें।


5
Android2.3.3 एक ही लगता है
ruX

2
4.3 में काम करता है सबसे आसान तरीका है और कम से कम राशि का कोड मैंने पाया है।
ओलिवर डिक्सन

10
अगर आप स्नैकबार
ज़ैक्यगौरव

getWindow ()। getDecorView ()। getRootView ()। getHeight () रिटर्न का प्रदर्शन ऊंचाई।
वोवहॉस्ट

3
getWindow ()। getDecorView ()। getRootView () स्नैक बार के लिए अनुशंसित नहीं है, यह सिस्टम नेविगेशन बार को ओवरलैप करेगा, findViewById (android.R.id.content) बेहतर होगा।
तेहबिनह84

31

वर्तमान गतिविधि से मूल दृश्य प्राप्त करें।

हमारी गतिविधि के अंदर हम इसके rootसाथ दृश्य प्राप्त कर सकते हैं :

ViewGroup rootView = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

या

View rootView = getWindow().getDecorView().getRootView();


19

बस किसी को उकसाना आसान तरीका है:

निम्नलिखित कोड पूरी गतिविधि का एक दृश्य देता है:

View v1 = getWindow().getDecorView().getRootView();

गतिविधि में एक प्रमाणित दृश्य प्राप्त करने के लिए, उदाहरण के लिए गतिविधि के अंदर एक छवि दृश्य, बस उस दृश्य की आईडी जोड़ें, जिसे आप प्राप्त करना चाहते हैं:

View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);

आशा है कि यह किसी की मदद करता है


5
findViewById(R.id.imageView1);यदि आप विशिष्ट दृश्य चाहते हैं तो आप केवल गतिविधि पर कॉल कर सकते हैं।
रॉबको


2

कोटलिन एक्सटेंशन समाधान

किसी गतिविधि में पहुंच को सरल बनाने के लिए इसका उपयोग करें। तब आप सीधे rootViewगतिविधि से, या उसके activity.rootViewबाहर का उल्लेख कर सकते हैं :

val Activity.rootView get() = window.decorView.rootView

यदि आप स्थिरता के लिए फ़्रैगमेंट के लिए समान जोड़ना चाहते हैं, तो जोड़ें:

val Fragment.rootView get() = view?.rootView

1

वर्तमान गतिविधि का दृश्य प्राप्त करने के लिए

किसी भी onClick में हमें 'view' मिल रहा होगा, 'view' का उपयोग करके rootView प्राप्त करें।

दृश्य देखें = view.getRootView ();

और टुकड़े में देखें

दृश्य देखें = FragmentClass.getView ();


0

यदि आप किसी गतिविधि में हैं, तो मान लें कि केवल एक मूल दृश्य है, आप इसे इस तरह प्राप्त कर सकते हैं।

ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
        .findViewById(android.R.id.content)).getChildAt(0);

फिर आप इसे अपनी वास्तविक कक्षा में डाल सकते हैं

या आप उपयोग कर सकते हैं

getWindow().getDecorView();

ध्यान दें कि इसमें एक्शनबार दृश्य शामिल होगा, आपका दृश्य एक्शनबार दृश्य से नीचे है


Activityकक्षा में ऐसी कोई विधि नहीं है ।
onelaview 10

window.decorView या window.decorView ViewGroup के रूप में - अगर आपको इसे व्यूग्रुप में डालने की जरूरत है
एडगर खिमिच

0

आप में से जो डेटा बाइंडिंग लाइब्रेरी का उपयोग कर रहे हैं , वर्तमान गतिविधि की जड़ प्राप्त करने के लिए, बस उपयोग करें:

View rootView = dataBinding.getRoot();

और कोटलिन उपयोगकर्ताओं के लिए, यह और भी सरल है:

val rootView = dataBinding.root

0

एक और कोटलिन एक्सटेंशन समाधान

यदि आपकी गतिविधि का दृश्य xml (उदा activity_root.xml) में घोषित किया गया है , तो xml खोलें और मूल दृश्य में एक आईडी निर्दिष्ट करें:

android:id="@+id/root_activity"

अब आपकी कक्षा में, दृश्य का उपयोग करके आयात करें:

import kotlinx.android.synthetic.main.activity_root.root_activity

अब आप root_activityदृश्य के रूप में उपयोग कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.