ইন এই , এই এবং এই থ্রেড আমি একটি একক দৃশ্য মার্জিন সেট করতে উপর একটি উত্তর খুঁজে করার চেষ্টা করেছেন। তবে, আমি ভাবছিলাম যে এর চেয়ে সহজ উপায় যদি না থাকে। আমি ব্যাখ্যা করব কেন আমি বরং এই পদ্ধতির ব্যবহার করতে চাই না:
আমার একটি কাস্টম বাটন রয়েছে যা বাটনটি প্রসারিত করে। যদি ব্যাকগ্রাউন্ডটি ডিফল্ট ব্যাকগ্রাউন্ড (অন্যথায় ফোন করে setBackgroundResource(int id)
বা অন্য কোনও কিছু) সেট করা থাকে setBackgroundDrawable(Drawable d)
, আমি মার্জিনটি 0 হতে চাই I
public void setBackgroundToDefault() {
backgroundIsDefault = true;
super.setBackgroundResource(android.R.drawable.btn_default);
// Set margins somehow
}
আমি মার্জিনগুলি -3 ডিপিতে পুনরায় সেট করতে চাই (আমি ইতিমধ্যে এখানে পিক্সেল থেকে ডিপিতে কীভাবে রূপান্তর করতে হবে তা এখানে পড়েছি , তাই আমি যখন পিক্সারে মার্জিন সেট করতে পারি তবে আমি নিজেই রূপান্তরটি পরিচালনা করতে পারি)। তবে যেহেতু এটি CustomButton
ক্লাসে বলা হয় , তাই পিতা-মাতা লিনিয়ারলআউট থেকে টেবিল লেআউটে পরিবর্তিত হতে পারে এবং আমি তার পরিবর্তে তার পিতামাতাকে পেতে এবং সেই পিতামাতার উদাহরণটি পরীক্ষা করতে চাই না। আমি এটি কল্পনাও করতে পারি যে এটি যথেষ্ট অসাধারণ।
এছাড়াও, কল করার সময় (লেআউটপ্যারাম ব্যবহার করে) parentLayout.addView(myCustomButton, newParams)
, আমি জানি না এটি এটি সঠিক অবস্থানে যুক্ত করেছে কিনা (তবে চেষ্টা করে দেখেনি) , পাঁচটি সারির মাঝের বোতামটি বলুন।
প্রশ্ন: লেআউটপ্যারাম ব্যবহারের পাশাপাশি প্রোগ্রামিংগতভাবে একটি একক বোতামের মার্জিন সেট করার কোনও সহজ উপায় কী?
সম্পাদনা: আমি লেআউটপ্যারাম পদ্ধতি সম্পর্কে জানি, তবে আমি এমন একটি সমাধান চাই যা প্রতিটি পৃথক ধারক প্রকারকে পরিচালনা করা এড়ায়:
ViewGroup.LayoutParams p = this.getLayoutParams();
if (p instanceof LinearLayout.LayoutParams) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
else if (p instanceof RelativeLayout.LayoutParams) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
else if (p instanceof TableRow.LayoutParams) {
TableRow.LayoutParams lp = (TableRow.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
}
কারণ this.getLayoutParams();
রিটার্ন একটি ViewGroup.LayoutParams
, যা বৈশিষ্ট্যাবলী হবে না topMargin
, bottomMargin
, leftMargin
, rightMargin
। আপনি যে MarginContainer
এমসির উদাহরণটি দেখেছেন তা হ'ল অফসেট (-3 ডিপি) মার্জিন এবং (ওল, ওএমআর, ওম্ট, ওম্ব) এবং আসল মার্জিনগুলি (মিলি, এমআর, এমটি, এমবি)।