android - AppCompat-v7 के साथ टूलबार और प्रासंगिक क्रियाबार
android-5.0-lollipop android-toolbar (5)
अद्यतन करें:
समाधान: windowActionModeOverlay संपत्ति का उपयोग करें। इसे अपनी थीम में सेट करें:
<item name="windowActionModeOverlay">true</item>
और एक्शनमोड इसे दबाए रखने के बजाय एक्शन बार पर दिखाया जाएगा। (यदि आप नवीनतम AppCompat का उपयोग नहीं कर रहे हैं तो आपको "एंड्रॉइड:" संपत्ति में उपसर्ग जोड़ने की आवश्यकता है)। यह मूल रूप से AppCompat को यह बताता है कि आपके पास स्क्रीन के शीर्ष पर स्थित टूलबार है और इसे एक्शनमोड को इसके ऊपर खींचना चाहिए।
पुराना उत्तर / कामकाज:
मैं एक समस्या मे फंस गया। कोई फर्क नहीं पड़ता कि मैं कौन सी थीम सेट करता हूं, यह हमेशा टूलबार को दबाता है जिसे मैंने एक्शनबार के रूप में सेट किया है। मैंने समर्थन पुस्तकालय के साथ और बिना प्रयास किया, लेकिन इससे कोई फर्क नहीं पड़ता।
दुर्भाग्य से मैं इसे ठीक करने में सक्षम नहीं था इसलिए मैंने इसके बजाय एक वर्कअराउंड बनाया है। मेरे ActionModeCallback
onCreateActionMode
मैं एक्शन बार छुपाता हूं:
actionBarToolbar.setVisibility(View.GONE);
और onDestroyActionMode
मैं इसे फिर से दिखाता हूं:
actionBarToolbar.setVisibility(View.VISIBLE);
छुपा / दिखावट इतनी जल्दी होती है कि यह मेरे परीक्षण उपकरणों पर ध्यान देने योग्य नहीं है। निश्चित रूप से एक नकारात्मक पक्ष है: हालांकि एंटर-एनीमेशन अभी भी काम करता है, प्रासंगिक कार्रवाई बार का निकास-एनीमेशन खो जाता है क्योंकि टूलबार तुरंत उस पर पॉप हो जाता है। लेकिन जब तक हम एक बेहतर समाधान में नहीं आते हैं, मुझे लगता है कि हम इसके साथ अटक गए हैं।
(मेरी गतिविधि वास्तव में एक कस्टम BaseActivity
क्लास का विस्तार कर रही है जिसमें Google I / O 2014 ऐप स्रोत कोड से लिया गया getActionBarToolbar()
नामक एक विधि है, इसलिए मैं टूलबार को आसानी से प्राप्त कर सकता हूं:
BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);
बहुत बुरा I / O ऐप प्रासंगिक क्रिया पट्टी का उपयोग नहीं करता है।)
मैं लॉलीपॉप और ऐपकंपेट-वी 7 लाइब्रेरी में पेश किए गए नए जोड़े गए टूलबार का उपयोग करने पर काम कर रहा हूं। मैंने टूलबार को स्थापित करने के लिए इस मार्गदर्शिका का पालन किया मैंने देखा कि जब आप कुछ ऐसा करते हैं जो प्रासंगिक एक्शनबार (जैसे प्रतिलिपि / पेस्टिंग के लिए टेक्स्ट हाइलाइट करना) लाएगा, तो यह टूलबार को पेज पर नीचे दबाएगा। आप देख सकते हैं कि मैं पृष्ठ के नीचे छवि में किस बारे में बात कर रहा हूं:
तो, अनिवार्य रूप से, मैंने इसे इस तरह स्थापित किया। मेरे पास एक XML फ़ाइल में परिभाषित टूलबार है जिसका उपयोग मैं टैग्स के साथ करता हूं:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
फिर, मैं इसे अपने विचार में तुरंत चालू करता हूं:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
कोड में, मैंने इसे इस तरह सेट किया है:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
क्या किसी को यह पता है कि इसे कैसे बनाना है ताकि प्रासंगिक क्रियाबार टूलबार के ऊपर से आता है?
इसे अपनी गतिविधि पर शुरू न करें, लेकिन अपने टूलबार पर। आप में गतिविधि:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
और आपको उपयोग करना होगा
<item name="windowActionModeOverlay">true</item>
जैकब के समाधान ने मेरे लिए काम किया लेकिन प्रासंगिक एक्शनबार पारदर्शी था और टूलबार इसके माध्यम से दिखाई देता था। इसे निम्नानुसार हल किया जा सकता है:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
....
....
<item name="actionModeStyle">@style/CustomActionMode</item>
</style>
<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="background">@color/primary_material_light</item>
</style>
विषय "AppTheme.Base" टूलबार पर लागू होना चाहिए।
प्रासंगिक एक्शनबार स्टाइल के बारे में अधिक जानकारी:
सामग्री डिजाइन में appCompat का उपयोग कर प्रासंगिक क्रिया बार को कस्टमाइज़ कैसे करें
टूलबार लाने के लिए टूलबार लाने के लिए बहुत उपयोगी तरीका toolbar.bringToFront()
मेरे मामले में, <item name="windowActionModeOverlay">true</item>
काम नहीं किया, लेकिन यह काम: <item name="android:windowActionModeOverlay">true</item>
, android
कुंजी है।