किसी दृश्य का मार्जिन प्राप्त करें


95

मैं किसी गतिविधि से दृश्य का मार्जिन मान कैसे प्राप्त कर सकता हूं? व्यू किसी भी प्रकार का हो सकता है।

थोड़ी खोज के बाद मुझे एक दृश्य की पैडिंग प्राप्त करने के तरीके मिले, लेकिन मार्जिन पर कुछ भी नहीं मिला। क्या कोई मदद कर सकता है?

मैंने कुछ इस तरह की कोशिश की,

ViewGroup.LayoutParams vlp = view.getLayoutParams();
int marginBottom = ((LinearLayout.LayoutParams) vlp).bottomMargin;

यह काम करता है, लेकिन उपरोक्त कोड में मैंने इस दृष्टिकोण को माना है LinearLayoutmarginजब मुझे दृश्य प्रकार नहीं पता है, तब भी मुझे इसकी विशेषता प्राप्त करने की आवश्यकता है ।

जवाबों:


180

इसे इस्तेमाल करे:

View view = findViewById(...) //or however you need it
LayoutParams lp = (LayoutParams) view.getLayoutParams();

मार्जिन के माध्यम से सुलभ हैं

lp.leftMargin;
lp.rightMargin;
lp.topMargin;
lp.bottomMargin;

संपादित करें: शायद ViewGroup.MarginLayoutParamsआपके लिए काम करेगा। यह अन्य के लिए एक आधार वर्ग है LayoutParams

ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html


7
वास्तव में मैं कुछ इस तरह की उम्मीद कर रहा था, लेकिन मुझे नहीं लगता कि कोई प्रत्यक्ष वर्ग कहा जाता है LayoutParams। जैसी कक्षाएं हैं FrameLayout.LayoutParams, RelativeLayout.LayoutParamsलेकिन LayoutParamsअपने आप में ऐसा कुछ नहीं है। और जब से मुझे दृश्य का प्रकार नहीं पता है, मैं किसी भी पूर्व वर्ग का उपयोग नहीं कर सकता।
अर्नब चक्रवर्ती

5
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();फिर क्या हुआ ?
व्लादिमीर

ViewGroup होना चाहिए। MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
रॉकहैमर


4

अब इस संपादित कोड का उपयोग करें। यह आपकी मदद करेगा

FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams();

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin

आपके द्वारा बताए गए तरीके बाएं, दाएं, ऊपर और नीचे देखने की स्थिति देते हैं, मुझे मार्जिन की आवश्यकता है।
अर्नब चक्रवर्ती

जरुरी नहीं। एक दृष्टिकोण शायद अभिविन्यास के LinearLayoutसाथ रखा गया है horizontal। यदि इसका दूसरा दृश्य लेआउट में है, तो view.getLeft()विधि मुझे इसके बाईं ओर के दृश्य के समतुल्य समन्वय प्रदान करेगी।
अर्नब चक्रवर्ती

क्या होगा यदि दृश्य एक है LinearLayout?
अर्नब चक्रवर्ती

3

जैसा कि दूसरों ने सुझाव दिया है कि, माता-पिता के # किनारे और आपके विचार के बीच लेआउट_मारगिन # है।

  • # "लेफ्ट", "राइट", "टॉप" या "बॉटम" की जगह

मार्जिन प्राप्त करना / स्थापित करना मेरे साथ काम करता है:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams();
params.topMargin += 20;
mView.requestLayout();

बेशक, मेरा दृश्य वास्तव में एक व्यूग्रुप था और माता-पिता भी एक व्यूग्रुप थे। ज्यादातर मामलों में, आपको अपने लेआउट पार्म्स को माता-पिता के दृश्य वर्ग लेआउटपरम में डाल देना चाहिए (इस मामले में यह ViewGroup और RelativeLayout है)

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