मैं layout_weightजावा कोड से गतिशील रूप से एंड्रॉइड में बटन के लिए विशेषता के लिए मूल्य कैसे निर्धारित कर सकता हूं ?
मैं layout_weightजावा कोड से गतिशील रूप से एंड्रॉइड में बटन के लिए विशेषता के लिए मूल्य कैसे निर्धारित कर सकता हूं ?
जवाबों:
आप इसे LinearLayout.LayoutParamsकंस्ट्रक्टर के हिस्से के रूप में पास कर सकते हैं :
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT,
1.0f
);
YOUR_VIEW.setLayoutParams(param);
अंतिम पैरामीटर वजन है।
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1fअगर कोई दशमलव स्थान नहीं हैं, तो भी सरल
Relative
उपयोग करें LinearLayout.LayoutParams:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
Button button = new Button(this);
button.setLayoutParams(params);
संपादित करें: आह, एरच का जवाब आसान है!
FILL_PARENTको हटा दिया गया है और MATCH_PARENTइसके बजाय इसका उपयोग किया जाना चाहिए।
MATCH_PARENTका उपयोग FILL_PARENTपुराने उपकरणों पर भी किया जा सकता है।
FILL_PARENTबनाम के बारे में चिंता करने से पहले संभवत: कई अन्य समस्याओं में भाग लेंगे MATCH_PARENT।
यदि आप पहले से ही अपने लेआउट (xml) फ़ाइल में अपने दृष्टिकोण को परिभाषित करते हैं, तो केवल वजन को प्रोग्रामेटिक रूप से बदलना चाहते हैं, यह तरीका बेहतर है
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)
mButton.getLayoutParams();
params.weight = 1.0f;
mButton.setLayoutParams(params);
नया एक लेआउटपार्म्स आपको xml फ़ाइल में हाशिये की तरह परिभाषित अन्य परामों को अधिलेखित करता है, या आपको उन सभी को लेआउटप्रेमों में निर्दिष्ट करने की आवश्यकता है।
यदि चौड़ाई, ऊंचाई और वजन वाला कंस्ट्रक्टर काम नहीं कर रहा है, तो कंस्ट्रक्टर का उपयोग चौड़ाई और ऊंचाई के साथ करने का प्रयास करें। और फिर मैन्युअल रूप से वजन सेट करें।
और यदि आप चाहते हैं कि चौड़ाई वजन के अनुसार सेट की जाए, तो चौड़ाई को कंस्ट्रक्टर में 0 पर सेट करें। ऊंचाई के लिए एक ही लागू होता है। नीचे कोड मेरे लिए काम करता है।
LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);
LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam2.weight = 0.7f;
child2.setLayoutParams(childParam2);
parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);
अगर मैं किसी को उत्तर की तलाश में हूँ, तो इसका उपयोग करें:
LinearLayout.LayoutParams lay = (LinearLayout.LayoutParams) myLayout.getLayoutParams();
lay.weight = 0.5;
यदि आप अपने लेआउट को xml फ़ाइल से आरंभ कर रहे हैं, तो यह रैखिक लेआउट के लिए नए लेआउट पैरामीटर प्रदान करने की तुलना में बहुत अधिक सुविधाजनक होगा।
layout_weightपहले से ही निर्धारित किया गया है, तो आपको View.requestLayout()अपडेट करने के लिए कॉल करना होगा।
मेरे लिए कोई भी LinearLayout.LayoutParamsऔर TableLayout.LayoutParamsसही बटन के लिए काम किया है TableRow.LayoutParams। अर्थात्:
TableRow.LayoutParams buttonParams = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT, 1f);
उपयोग करने MATCH_PARENTया WRAP_CONTENTउसी के बारे में।
FILL_PARENTको हटा दिया गया है और MATCH_PARENTइसके बजाय इसका उपयोग किया जाना चाहिए।
LayoutParamsसीधे माता-पिता को फोन करते हैं। मुझे लगता है कि आपके पास LinearLayout.LayoutParamsमाता-पिता के बिना एक दुर्घटना का उपयोग करने का प्रयास था LinearLayout।
यदि आपने पहले ही लेआउट (xml) फ़ाइल में अपना दृष्टिकोण परिभाषित कर लिया है और केवल वज़न प्रो को व्याकरणिक रूप से बदलना चाहते हैं , तो फिर नए लेआउटप्रैम का निर्माण आपको xml फ़ाइल में परिभाषित अन्य पैरामेट्स को अधिलेखित कर देता है।
तो पहले आपको "getLayoutParams" और फिर setLoutoutParams का उपयोग करना चाहिए
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams();
params.weight = 4f;
mButton.setLayoutParams(params);
यदि layoutparamsपहले से ही (XML या गतिशील रूप में) परिभाषित किया गया है, तो यहां एक लाइनर है:
((LinearLayout.LayoutParams) mView.getLayoutParams()).weight = 1;
कोटलिन का उपयोग करके आप कुछ ऐसा कर सकते हैं:
import android.content.Context
import android.support.v4.content.ContextCompat
import android.support.v7.widget.CardView
import android.widget.*
import android.widget.LinearLayout
class RespondTo : CardView {
constructor(context: Context) : super(context) {
init(context)
}
private fun init(context: Context) {
val parent = LinearLayout(context)
parent.apply {
layoutParams = LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT, 1.0f).apply {
orientation = LinearLayout.HORIZONTAL
addView(EditText(context).apply {
id = generateViewId()
layoutParams = LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 0.9f).apply {
}
})
addView(ImageButton(context).apply({
layoutParams = LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 0.1f)
background = null
setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_save_black_24px))
id = generateViewId()
layoutParams = RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT).apply {
addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
// addRule(RelativeLayout.LEFT_OF, myImageButton.id)
}
}))
}
}
this.addView(parent)
}
}