गतिविधि की सामग्री दृश्य कैसे प्राप्त करें?


279

अगर किसी एक्टिविटी का कंटेंट व्यू (एक बार मेकओवर सेटवेट व्यू () कहा गया है ) हो तो मुझे किस विधि से कॉल करना चाहिए ?

जवाबों:


523
this.getWindow().getDecorView().findViewById(android.R.id.content)

या

this.findViewById(android.R.id.content)

या

this.findViewById(android.R.id.content).getRootView()

4
या getWindow().findViewById(android.R.id.content):)
एलेक्स लॉकवुड

1
यह ठीक काम करता है जहाँ तक जनक दृश्य प्राप्त करने का संबंध है ... BUt..if मैं यह कोशिश करता हूँ। यह खतरनाक काम है .. क्या आप कृपया सुझाव दे सकते हैं .. अग्रिम धन्यवाद
राजेश वाधवा

3
यदि आप XML से लेआउट का उपयोग करते हैं setContentView(R.layout.my_view), तो यह उस लेआउट के जनक को लौटाता है ।
Jay Lieske

नमस्कार @ मुझे सबसे अच्छा सवाल है, जैसे अगर मेरे लेआउट में टैब टैब में दो टैब से ऊपर एक छवि है। और एक सैटेलाइट मेन्यू के नीचे, मेनू आइटम पर कलंक लगाना चाहते हैं।
देवेन्द्र सिंह

1
Android.Resource.Id के लिए सामग्री मौजूद नहीं है।
जस्टिन

23

यदि आप अपने लेआउट में एक आईडी डालते हैं तो आप दृश्य वापस पा सकते हैं।

<RelativeLayout
    android:id="@+id/my_relative_layout_id"

और इसे findViewById से कॉल करें ...


यह एक स्थापित लेआउट की जड़ प्राप्त करने का सबसे मजबूत तरीका है।
Jay Lieske

3
आप क्या पास करते हैं findViewById?
ट्रांस

1
@trans देखें सामग्री देखें = findViewById (R.id.my_relative_layout_id);
जस्टिन लियू

11

कैसा रहेगा

View view = Activity.getCurrentFocus();

यह कैसे अधिक अंगूठे नहीं है? बहुत अच्छा काम करता है!
अंकोरेजिस

1
@aeskreis क्योंकि मेरे मामले में यह अशक्त हैcurrentFocus?.let { ... }
user924


5

आप ओवरराइड भी कर सकते हैं , जिसे बुलाए onContentChanged()जाने पर निकाल दिए गए अन्य लोगों setContentView()में से है।


ernest का उत्तर आपको वर्तमान
फ़ोकस किए गए

2

यदि आप उपयोग कर रहे हैं Kotlin

    this.findViewById<View>(android.R.id.content)
                         .rootView
                         .setBackgroundColor(ContextCompat.getColor(this, R.color.black))

1

कोई "ContentViewSet "विधि नहीं है। आप कुछ डमी अनुरोध डाल सकते हैं। इस तरह से setCententView से पहले कोशिश / कैच ब्लॉक में कॉल करें।

प्रयत्न {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} कैच (AndroidRuntimeException e) {
  // smth या कुछ भी नहीं
}

यदि सामग्री दृश्य पहले से सेट था, तो RequestWindowFeature एक अपवाद फेंक देगा।


-3

सबसे अच्छा विकल्प जो मुझे मिला और कम दखल देने वाला है, जैसे आपके xml में एक टैग परम सेट करना है

PHONE XML LAYOUT

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="phone"/>

TABLET XML LAYOUT

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="tablet">

    ...

</RelativeLayout>

और फिर इसे अपनी गतिविधि कक्षा में कॉल करें:

View viewPager = findViewById(R.id.pager);
Log.d(getClass().getSimpleName(), String.valueOf(viewPager.getTag()));

आशा है कि यह यू के लिए काम करता है।


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