प्रोग्रामिक रूप से देखने के लिए पैडिंग जोड़ें


235

मैं एंड्रॉइड v2.2 ऐप को डिवेलप कर रहा हूं।

मेरा एक टुकड़ा है

onCreateView(...)मेरे टुकड़े वर्ग के कॉलबैक में, मैं नीचे दिए गए टुकड़े की तरह एक लेआउट बढ़ाता हूं:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.login, null);

    return view;
}

ऊपर फुलाया लेआउट फ़ाइल है (login.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
 >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Username" />

</LinearLayout>

मैं paddingTopउपरोक्त <LinearLayout>तत्व को सेट करना चाहूंगा , और मैं इसे xml में करने के बजाय जावा कोड में करना चाहता हूं ।

कैसे स्थापित करने के लिए paddingTopकरने के लिए <LinearLayout>मेरी टुकड़ा जावा वर्ग कोड में ??


2
आपको अपने LinearLayout को एक आईडी असाइन करने की आवश्यकता होगी ताकि आप इसे ढूंढ सकें findViewByIdऔर फिर उस setPaddingपर कॉल कर सकें।
अलेक्सां जी

@AleksG सामान्य तौर पर हां, लेकिन यह देखते हुए कि लिनियरलैट फुलाए हुए पदानुक्रम का मूल तत्व है जो कि यहां neccessary नहीं है। viewपहले से ही LinearLayout है, इस मामले में इसे फिर से खोजने की कोई आवश्यकता नहीं है। हालांकि यह एक विशेष है।

1
@alextsc: हाँ, सहमत हूँ। फिर भी, मैं अभी भी आईडी को कुछ भी निर्दिष्ट करना पसंद करता हूं जिसे मैं आवेदन में संदर्भित कर सकता हूं।
एलेक्स जी

जवाबों:


486

view.setPadding(0,padding,0,0);

यह टॉप-पेडिंग टू- paddingपिक्सल्स सेट करेगा ।

यदि आप dpइसके बजाय इसे सेट करना चाहते हैं , तो आप रूपांतरण कर सकते हैं :

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);

6
@ Leem.fin जैसा कि क्रिस कहते हैं, यह पिक्सेल है। यदि आप dp चाहते हैं तो आपको मैन्युअल रूप से रूपांतरण करना होगा:float scale = getResources().getDisplayMetrics().density; int size = (int) (sizeInPx*scale + 0.5f);
Jave

7
0.5f कहां से आ रहा है?
हेर वॉन वुस्ट

11
@Georg यह कोड यहाँ से लिया गया है: developer.android.com/guide/practices/… 0.5 का उपयोग करीबी पूर्णांक प्राप्त करने के लिए किया जाता है, जब कास्टिंग (Math.round () का उपयोग करने के बजाय)
Jave

मुझे लगता है कि चर नामों के आसपास दूसरा रास्ता होना चाहिए: sizeInDpवास्तव में sizeInPxडीपीएस कन्वर्ट करते समय आपके द्वारा प्राप्त पिक्सेल की संख्या होती है ।
फ्राइडेरब्लुमेले

99

अपने दूसरे प्रश्न का उत्तर देने के लिए:

view.setPadding(0,padding,0,0);

जैसे SpK और Jave ने सुझाव दिया है, पिक्सल में पैडिंग सेट करेगा। आप इसे dp मान के अनुसार dp में सेट कर सकते हैं:

int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);

उम्मीद है की वो मदद करदे!


3
निश्चित रूप से यह उम्मीद के मुताबिक काम करेगा और काम करेगा, लेकिन स्पष्टता के लिए आपको अपने अंतर चर का नाम बदलना चाहिए। क्योंकि आप डीपी में अपने पैडिंग को परिभाषित करते हैं और गणना करते हैं कि इस दिए गए डिवाइस के लिए पिक्सल में क्या होगा।
ग्लेन 85

आप dp को पिक्सेल में परिवर्तित कर रहे हैं। चर नाम भ्रमित कर रहे हैं। "पेडिंगपिक्सल" का वास्तव में अर्थ है dp
जेइचो वांग

92

यदि आप संसाधन फ़ाइलों में गद्दी संग्रहीत करते हैं, तो आप बस कॉल कर सकते हैं

int padding = getResources().getDimensionPixelOffset(R.dimen.padding);

यह आपके लिए रूपांतरण करता है।



15

आप नीचे दिए गए कोड में व्याकरणिक रूप से अपने विचार के लिए पैडिंग सेट कर सकते हैं -

view.setPadding(0,1,20,3);

और, विभिन्न प्रकार के पेडिंग भी उपलब्ध हैं -

गद्दी

नीचे गद्दी करना

गद्दी छूट गई

PaddingRight

पैडिंग शीर्ष

ये, लिंक एंड्रॉइड डेवलपर्स साइट को संदर्भित करेंगे। आशा है कि यह आपकी बहुत मदद करेगा।


@ Leem.fin इस पर एक नज़र डालें आप अंतर जानने में सक्षम होंगे।
प्रवीणकुमार

9

का उपयोग करते हुए TypedValueमैन्युअल रूप से की गणना की तुलना में पिक्सल में कनवर्ट करने का एक बहुत क्लीनर तरीका है:

float paddingDp = 10f;
// Convert to pixels
int paddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingDp, context.getResources().getDisplayMetrics());
view.setPadding(paddingPx, paddingPx, paddingPx, paddingPx);

अनिवार्य रूप से, TypedValue.applyDimensionवर्तमान डिवाइस के प्रदर्शन गुणों के आधार पर वांछित पेडिंग को उचित रूप से पिक्सेल में परिवर्तित करता है।

अधिक जानकारी के लिए देखें: TypedValue.applyDimension डॉक्स


1
पीएक्स और डीपी को उलट नहीं करना चाहिए?
chris838

मुझे लगता है कि मैं जो भी कर रहा हूं, उसका सही मतलब है। हालांकि नामकरण मुझे लगता है कि भ्रमित है। मैं इसे अधिक स्पष्ट होने के लिए संपादित करूंगा। प्रतिक्रिया के लिए धन्यवाद।
i9797i

7

पैडिंग को गतिशील रूप से सेट करने के लिए नीचे दी गई विधि का उपयोग करें

setPadding(int left, int top, int right, int bottom)

उदाहरण :

view.setPadding(2,2,2,2);

3

पैडिंग सेट करने के लिए निम्नलिखित कोड लिखें, यह आपकी मदद कर सकता है।

TextView ApplyPaddingTextView = (TextView)findViewById(R.id.textView1);
final LayoutParams layoutparams = (RelativeLayout.LayoutParams) ApplyPaddingTextView.getLayoutParams();

layoutparams.setPadding(50,50,50,50);

ApplyPaddingTextView.setLayoutParams(layoutparams);

बच्चे के दृश्य के अभिभावक लेआउट के अनुसार LinearLayout.LayoutParamsया उपयोग करेंRelativeLayout.LayoutParams


सेटपैडिंग () लेआउटपार्म्स की एक सुलभ विधि नहीं है। मुझे यकीन नहीं है कि यह कभी था।
श्रीराम

2
Context contect=MainActivity.this;
TextView tview=new TextView(context);
tview.setPaddingRelative(10,0,0,0);

4
इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि समस्या का एक अच्छा समाधान क्यों है, यह दिखा कर इसके दीर्घकालिक मूल्य में बहुत सुधार होगा और यह भविष्य के पाठकों को अन्य, इसी तरह के सवालों के साथ अधिक उपयोगी बना देगा। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
मकर

0

प्रोग्रामिंग को पैडिंग करते समय, पिक्सेल से Dp में परिवर्तित करके घनत्व से संबंधित मानों में परिवर्तित करें।

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