यह वह उत्तर नहीं हो सकता है जिसकी आप उम्मीद कर रहे थे।
एक अलग प्रश्न पर विचार करें: क्या हम setContentView(...)
के बाद गतिविधि विषय बदल सकते हैं? सवाल कई बार पूछा गया है, और एक सामान्य समाधान फिर से बनाना है (finish()
और startActivity(getIntent())
पर कॉल करना) गतिविधि और setContentView(...)
से पहले नई थीम सेट करें।
आपका प्रश्न इस पर एक विस्तार है - एक टुकड़े से विषय बदलने की अतिरिक्त जटिलता के साथ। किसी भी मामले में, मैं एक अच्छे से ऊपर उल्लिखित समाधान पर विचार नहीं करता हूं।
एक्शनबार एक गतिविधि बनने पर शुरू होने वाले पहले घटकों में से एक है। मुझे नहीं लगता कि आपको किसी भी तरह से नए गुणों के साथ 'रीफ्रेश' करने का कोई तरीका मिलेगा। कैसे के बाद setContentView (...) के साथ requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY)
विधि सौदों कॉल नीचे देखें:
@Override
public boolean requestFeature(int featureId) {
if (mContentParent != null) {
throw new AndroidRuntimeException("requestFeature() must be
called before adding content");
}
....
....
}
तो, एक क्रम-अपवाद setContentView(...)
पहले से ही गतिविधि (जो भी हो, आपके मामले में) के लिए बुलाया गया है अगर फेंक दिया जाएगा।
क्या यह संभव है कि आपको इस कार्यक्षमता की भी आवश्यकता न हो?
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library attribute for compatibility -->
<item name="windowActionBarOverlay">true</item>
यहाँ मेरी समस्या है:
प्रारंभ ActionBar सेट करके अपने विषय में एक उपरिशायी किया जाना है। मैं कुछ टुकड़ों में ओवरले के रूप में एक्शनबार को प्रदर्शित करना चाहता हूं ...
ठीक है। हम पहले से ही इसके लिए प्रावधान कर चुके हैं।
... लेकिन दूसरों में नहीं।
कहें कि आप एक्शनबार को फ्रैगमेंट बी में ओवरले के रूप में नहीं रखना चाहते हैं।फिर, टुकड़ा बी के लेआउट में, निम्न करें:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize" > <<<-- ?attr/actionBarSize
for compatibility
....
....
</LinearLayout>
शीर्ष मार्जिन ActionBar के आकार करने के लिए सेट के साथ
, टुकड़ा बी लगता है कि यह एक नियमित रूप से ActionBar है - नहीं एक मढ़ा एक। इसे प्राप्त करने का एक और तरीका View
होगा android:layout_height="?android:attr/actionBarSize"
ऊपर लेआउट में पहले बच्चे के रूप में रखा गया है।
संक्षेप में:
- अपने ActionBar एक उपरिशायी हो जाएगा।
- उन टुकड़ों में जहां एक्शनबार स्वचालित रूप से छिपाएगा, टुकड़े लेआउट में कोई शीर्ष-मार्जिन सेट नहीं होगा।
- उन टुकड़ों में जहां एक्शनबार को ओवरलैड नहीं किया जाना चाहिए, टुकड़े लेआउट शीर्ष-मार्जिन
actionBarSize
पर सेट होगा।
नोट की एक बिंदु (Jelle
करने के लिए धन्यवाद):
यदि आपका ActionBar
अर्द्ध पारदर्शी है, यह एक सुसंगत देखो के लिए के बजाय गद्दी मार्जिन उपयोग करने के लिए सबसे अच्छा होगा।
एक्शनबार गतिविधि निर्भर हैं, इसके लिए समाधान संभव नहीं है डिफ़ॉल्ट कार्रवाई के साथ आप लेआउट की तरह अपनी खुद की एक्शनबार बनाना चाहते हैं और फिर आप इसके ऊपर अधिक नियंत्रण प्राप्त कर पाएंगे। अगर आप टाइटल बार –
के लिए एक्शन बार का उपयोग कर रहे हैं तो मैं इसे पुन: प्रस्तुत कर दूंगा, मैं समझता हूं कि एक्शनबार गतिविधि निर्भर हैं। और मैं एक शीर्षक पट्टी से अधिक के लिए एक्शनबार का उपयोग कर रहा हूँ। मैं क्या सोच रहा हूं कि अगर मुख्य गतिविधि में वापस बुलाकर टुकड़े के भीतर से एसीओनबार को बदलने का कोई तरीका है। समस्या यह है कि मुझे प्रोग्रामेटिक रूप से ऐसा करने की आवश्यकता होगी क्योंकि थीम (मुझे लगता है) के माध्यम से बदलाव लागू करने में बहुत देर हो चुकी है। ????? – JustLearningAgain
यदि मैं समझता हूं कि आप चाहते हैं कि आप अपने टुकड़े से एक्शन बार को संशोधित कर सकें? –