2011-09-19 14 views
72

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

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

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

,

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

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

उत्तर

136

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

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

+5

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

+4

'ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();' फिर? के बारे में क्या? – Vladimir

+0

व्यू ग्रुप होना चाहिए। मार्जिनलाउआउट पैराम्स एलपी = (व्यू ग्रुप। मार्गिनलेआउट पैराम्स) view.getLayoutParams(); – rockhammer

4

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

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

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

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

+0

इस अर्थ में मार्जिन कितनी देर तक बाएं और दाएं से ... –

+0

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

2

दूसरों के रूप में सुझाव दिया, layout_margin # माता पिता की # बढ़त और आपके विचार के बीच की जगह है।

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams(); 
params.topMargin += 20; 
mView.requestLayout(); 
बेशक

, मेरे दृश्य:

  • # को बदलता है "वाम", "ठीक है", "शीर्ष" या "नीचे"

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

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