एंड्रॉयड सेट ऊंचाई और कस्टम दृश्य की चौड़ाई प्रोग्रामिक रूप से


128

मैंने नाम से एक कस्टम दृश्य बनाया है Graphview। यहाँ ग्राफव्यू क्लास के लिए संरचना है।

public class GraphView extends View {

    public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
        super(context);
                ........
   }

   ..................
   .................
}

मैंने एक टैबलर में दृश्य का उपयोग करके जोड़ा है addview()। यह ठीक काम कर रहा है। अब मैं ऊंचाई और चौड़ाई निर्धारित करना चाहता हूं GraphView। उसको कैसे करे?

जवाबों:


140

आसान तरीका यह है कि आकार को प्रोग्रामेटिक रूप से सेट करें:

graphView.setLayoutParams(new LayoutParams(width, height));

यदि आप दृश्य का सही आकार जानते हैं तो यह ठीक है। हालांकि, अगर आप एक और अधिक लचीला दृष्टिकोण चाहते हैं, आप ओवरराइड कर सकते हैं onMeasure()विधि दृश्य अधिक सटीक स्थान उपलब्ध और लेआउट की कमी के आधार पर (मापने के लिए wrap_content,match_parent या एक निश्चित आकार)।

आप एंड्रॉइड डॉक्स और अपने एसडीके निर्देशिका में नमूना onMeasure()देखकर ओवरराइड करने के तरीके पर एक उदाहरण पा सकते हैं ।LabelView


16
यह जानना उपयोगी होगा कि आप कौन से लेआउटप्रेम का आयात कर रहे हैं।
user3690202

1
LayoutParamsलेआउट कहाँ से होना चाहिए graphViewरखा गया है। उदाहरण के लिए यदि एक्सएमएल लेआउट फ़ाइल में graphViewअंदर रखा जाता है RelativeLayout, तो आप का उपयोग करना चाहिएnew RelativeLayout.LayoutParams(width, height)
विक

208

आप इस तरह ऊंचाई और चौड़ाई निर्धारित कर सकते हैं:

myGraphView.setLayoutParams(new LayoutParams(width, height));

76
आपको यह सुनिश्चित करना चाहिए कि आपके द्वारा उपयोग किया जाने वाला LayoutParam वर्ग सही पैरेंट लेआउट वर्ग से है। उदाहरण के लिए, यदि आपका रेखांकन रेखीय लाइनआउट में निहित है, तो आपको LinearLayout.LayoutParams वर्ग का उपयोग करने की आवश्यकता है।
यिनक्रैश

41
यह भी काम करता है और सुनिश्चित करता है कि आप सही LayoutParams वर्ग का उपयोग करें: बस करो myGraphView.getLayoutParams().height = 100;
sulai

21
यदि आप करते हैं this.getLayoutParams().height = 100, तो इसका पालन करना सुनिश्चित करें this.setLayoutParams(this.getLayoutParams()), अन्यथा यह कुछ भी नहीं करेगा (उपयोगी)।
अचल दवे

4
मुझे लगता है कि यह अजीब है कि इस जवाब को अधिक अंक मिल रहे हैं। जबकि यह आसान है यह बहुत कम मॉड्यूलर है; यदि आप किसी अन्य स्थान पर अपने दृश्य का उपयोग करना चाहते हैं, तो आपको उन चौड़ाई / ऊँचाई मानों को भी हार्डकोड करना होगा। इसका उपयोग करने के बारे में सावधान रहें।
उद्यान जू

1
धन्यवाद @yincrash कि बाहर इशारा करने के लिए। यह अजीब लगता है कि मुझे अपने कस्टम दृश्य के मूल वर्ग (मेरे मामले में भूतल देखें) के बजाय मूल दृश्य वर्ग (मेरे मामले में RelativeLayout) का उपयोग करने की आवश्यकता है
ericn

75

आप इस तरह से एक रिश्तेदार लेआउट में एक दृश्य की ऊंचाई और चौड़ाई निर्धारित कर सकते हैं

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);

2
आपको फिर से लेआउटपरम सेट करने की आवश्यकता नहीं है। यह अपने आप परावर्तित हो जाता है। यह वस्तु उन्मुख दृष्टिकोण का लाभ है।
दीपेंद्र

8
@ दीपेंद्र को कॉल करने setLayoutParams()की आवश्यकता है क्योंकि यह अन्य विधियों जैसे कि resolveLayoutParams()औरrequestLayout()
विलियम

onCreate getLayoutParams () के रूप में अपवाद देना शून्य मान है। इसके अतिरिक्त, अपवाद का कारण
Sibasish

आपको उस दृश्य को संदर्भित करना चाहिए जिसके लिए आपको ऊंचाई निर्धारित करनी है। जांचें कि क्या आप उसी दृश्य की ओर इशारा कर रहे हैं
राखी

1
हो रही layoutParamsएक दृश्य के दीक्षा पर एक एनपीई हो जाएगा, यह आप के लिए क्या बिंदु चलाने पर कृपया समझा?
जॉन सरदिंया John ’

6

कोटलिन पर आप किसी भी दृश्य की चौड़ाई और ऊंचाई सीधे उनके आभासी गुणों का उपयोग करके सेट कर सकते हैं:

someView.layoutParams.width = 100
someView.layoutParams.height = 200

4
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12आपका स्पिनर और 200 , 120 है widthऔर heightआपके लिए है spinner


3

यह एक कोटलिन आधारित संस्करण है, यह मानते हुए कि मूल दृश्य इसका उदाहरण है LinearLayout

someView.layoutParams = LinearLayout.LayoutParams(100, 200)

यह एक लाइन में चौड़ाई और ऊंचाई ( 100और 200) सेट करने की अनुमति देता है ।

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