7

मैं प्रोग्राम के रूप में इस तरह से उपकरण पट्टी की ऊंचाई निर्धारित करने की कोशिश कर रहा हूँ:सेट टूलबार ऊंचाई प्रोग्राम के रूप में एंड्रॉयड

toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42)); 
toolbar.setMinimumHeight(42); 

लेकिन यह इस लॉग साथ घातक अपवाद का कारण बनता है ->android.widget.relativelayout$layoutparams cannot be cast to android.support.v7.Toolbar$layoutparams

मैं भी इस प्रकार का प्रयास करें:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toolbar.getLayoutParams(); 
params.height = 42; 
toolbar.setLayoutParams(params); 
toolbar.setMinimumHeight(42); 

यह एक अपवाद नहीं देता है, लेकिन यह भी यह काम नहीं करता और उपकरण पट्टी यह मेरी परिभाषित की जगह में बड़ा ऊंचाई डिफ़ॉल्ट है हो जाता है। लेकिन निश्चित रूप से xml कार्यों में पैरामीटर सेट करना, लेकिन मुझे जावा में भी ऊंचाई सेट करने की आवश्यकता है।

तो कृपया समस्या को हल करने में मेरी सहायता करें।

उत्तर

10

इस प्रयास करें मेरे लिए ठीक काम करता है।

ऊपर कोड अभी भी काम नहीं करता है, अंत में इस लाइन जोड़ने की कोशिश -

mToolbar.requestLayout(); 

ऊपर लाइन सब कुछ remeasure में अपनी टूलबार बाध्य करेगा। आपका कोड काम नहीं कर रहा है क्योंकि आप लेआउट बढ़ने के बाद ऊंचाई को बदलने की कोशिश कर रहे हैं। उस स्थिति में आपको सब कुछ हटाने के लिए अपने दृश्य को मजबूर करने की आवश्यकता है। अधिक जानकारी के लिए निम्न विधियों पर एक नज़र डालें - requestLayout(), अवैध() और forceLayout()। ले जाने पर लेआउटपैम्स को बदलने के दौरान, ये तीन विधियां आसान होती हैं लेकिन एक बड़ी कीमत के साथ। यदि आपका लेआउट बहुत भारी है और इसमें बहुत से बच्चे के दृश्य हैं, तो इनमें से किसी भी विधि को कॉल करने से आपके ऐप के प्रदर्शन को कम अंत उपकरणों पर विशेष रूप से प्रभावित किया जाएगा। तो सुनिश्चित करें कि आप इन विधियों का वास्तव में सावधानी से उपयोग करें।

और आपके द्वारा वर्णित क्रैश हो रहा है क्योंकि आपका टूलबार आपके रूट व्यू का एक बच्चा दृश्य है और आपका मूल दृश्य सापेक्ष लयआउट है। आशा करता हूँ की ये काम करेगा।

इसके अलावा कृपया सिलंबरासन पोंगुति द्वारा इसके थोड़ा संदिग्ध के जवाब का पालन न करें। यदि आप चाइल्ड लेआउट पैराम्स तक पहुंचने का प्रयास कर रहे हैं तो लेआउटपार्म कास्टिंग की आवश्यकता है। यहां तक ​​कि व्यू के अपने लेआउट पैराम्स भी हैं, आपको इसे पूर्व में मूल या मूल लेआउट पैराम्स में डालना होगा। यदि आपके टूलबार के RelativeLayout तो Toolbar.LayoutParams को LayoutParams कास्टिंग एप्लिकेशन दुर्घटना होगा एक बच्चे दृश्य है और आप, RelativeLayout.LayoutParams

+0

एक बहुत ही सटीक उत्तर के लिए धन्यवाद, यह काम करता है। – Veka

+0

खुशी हुई यह मदद की। – Varundroid

+0

मैंने एंड्रॉइड में दृश्यों के संदर्भ में चीजें कैसे काम करती हैं, इस बारे में थोड़ा और स्पष्टीकरण जोड़ा है। आशा है कि आप इसे उपयोगी पाएंगे। – Varundroid

1

इस प्रयास करें ...

टूलबार LayoutParams ही गया है। आप इसे रिलेटिव लेआउट में नहीं डाल सकते हैं। यह

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams(); 
layoutParams.height = 42; 
mToolbar.setLayoutParams(layoutParams); 

-

Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams(); 
    params.height = 42; 
    mToolbar.setLayoutParams(params); 

आप रन टाइम पर उपकरण पट्टी की ऊंचाई सेट करना चाहते हैं बस

int expected_height = your value; 
    mToolbar.setMinimumHeight(expected_height); 

मुबारक कोडिंग इस तरह करते हैं, ...

+0

उत्तर के लिए धन्यवाद, मैंने उस कोड को भी आजमाया है, लेकिन यह वही अपवाद देता है।यह भी निर्धारित करें कि न्यूनतम न्यूनतम ऊंचाई के मामले में यह भी नहीं है कि टूलबार – Veka

+0

की डिफ़ॉल्ट न्यूनतम ऊंचाई प्राप्त हो रही है, यह नहीं है कि लेआउट पैराम कैसे काम करता है। यहां तक ​​कि व्यू के अपने लेआउट पैराम्स भी हैं, आपको इसे पूर्व में मूल या मूल लेआउट पैराम्स में डालना होगा। यदि आपका टूलबार रिलेटिव लयआउट का एक बच्चा दृश्य है तो टूलबार में लेआउट पैराम्स कास्टिंग करें। लयआउट पैराम ऐप को क्रैश कर देगा और आपको लेआउट पैराम्स को रिलेटिव लेआउट में डालना होगा। लयआउट पैराम्स – Varundroid

0

को LayoutParams कास्ट करने के लिए इसके साथ android.support.v7.Toolbar काम करता है के बाद से त्रुटि आप ViewGroup.LayoutParams उपयोग करने की आवश्यकता से बचने के लिए है और इसे mToolbar.getLayoutParams().

संबंधित मुद्दे