এই বৈশিষ্ট্যটি জাভা কোডে গতিশীল পরিবর্তন করা যেতে পারে?
android:layout_marginRight
আমার একটি আছে TextView
, এটির গতিগতভাবে কিছু পিক্সেলকে তার অবস্থান পরিবর্তন করতে হবে।
প্রোগ্রামটিমে কীভাবে এটি করবেন?
এই বৈশিষ্ট্যটি জাভা কোডে গতিশীল পরিবর্তন করা যেতে পারে?
android:layout_marginRight
আমার একটি আছে TextView
, এটির গতিগতভাবে কিছু পিক্সেলকে তার অবস্থান পরিবর্তন করতে হবে।
প্রোগ্রামটিমে কীভাবে এটি করবেন?
উত্তর:
সম্পাদনা: এটি করার আরও সাধারণ উপায় যা বিন্যাসের ধরণের উপর নির্ভর করে না (এটির বাইরে যে এটি একটি বিন্যাসের ধরণ যা মার্জিনকে সমর্থন করে):
public static void setMargins (View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
v.requestLayout();
}
}
টেক্সটভিউয়ের জন্য আপনার ডক্সটি পরীক্ষা করা উচিত । মূলত, আপনি টেক্সটভিউয়ের লেআউটপ্যারামস অবজেক্টটি পেতে এবং মার্জিনগুলি সংশোধন করতে চান, তারপরে এটিকে আবার টেক্সটভিউতে সেট করুন। এটি একটি লিনিয়ারলআউটে রয়েছে ধরে নেওয়া, এরকম কিছু চেষ্টা করুন:
TextView tv = (TextView)findViewById(R.id.my_text_view);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams();
params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom
tv.setLayoutParams(params);
আমি এখনই এটি পরীক্ষা করতে পারছি না, তাই আমার ingালাই কিছুটা হলেও বন্ধ হয়ে যেতে পারে তবে লেআউটপ্যারামগুলি মার্জিন পরিবর্তন করার জন্য যা পরিবর্তন করতে হবে তা।
ভুলে যাবেন না, যদি আপনার TextView ভিতরে, উদাহরণস্বরূপ, একটি RelativeLayout , এক ব্যবহার করা উচিত RelativeLayout.LayoutParams পরিবর্তে LinearLayout.LayoutParams এর
লেআউটপ্যারামগুলি ব্যবহার করুন (আগেই ব্যাখ্যা করা হয়েছে)। তবে কোন লেআউটপ্যারাম বেছে নেবেন সে সম্পর্কে সতর্ক হন। Https://stackoverflow.com/a/11971553/3184778 অনুসারে "আপনি যে ভিউটিতে কাজ করছেন তার পার্টেন্টের সাথে সম্পর্কিত যেটি ব্যবহার করতে হবে, আসল দৃশ্য নয়"
উদাহরণস্বরূপ, যদি টেক্সটভিউটি কোনও টেবিলরোর অভ্যন্তরে থাকে, তবে আপনাকে তুলনামূলক লেআউট বা লিনিয়ারলআউটের পরিবর্তে টেবিলরো.লয়আউটপ্যারাম ব্যবহার করতে হবে you
সব ধরণের মার্জিন সেট করতে এই ফাংশনটি ব্যবহার করুন
public void setViewMargins(Context con, ViewGroup.LayoutParams params,
int left, int top , int right, int bottom, View view) {
final float scale = con.getResources().getDisplayMetrics().density;
// convert the DP into pixel
int pixel_left = (int) (left * scale + 0.5f);
int pixel_top = (int) (top * scale + 0.5f);
int pixel_right = (int) (right * scale + 0.5f);
int pixel_bottom = (int) (bottom * scale + 0.5f);
ViewGroup.MarginLayoutParams s = (ViewGroup.MarginLayoutParams) params;
s.setMargins(pixel_left, pixel_top, pixel_right, pixel_bottom);
view.setLayoutParams(params);
}
কোর KTX মডিউল সাধারণ লাইব্রেরি যা Android ফ্রেমওয়ার্ক, অংশ জন্য এক্সটেনশন প্রদান করে androidx.core.view
তাদের মধ্যে।
dependencies {
implementation "androidx.core:core-ktx:{latest-version}"
}
নিম্নলিখিত এক্সটেনশন ফাংশনগুলি মার্জিনগুলি মোকাবেলা করার জন্য কার্যকর:
setMargins()
এক্সটেনশন ফাংশন:মধ্যে সেট সব কুড়াল মার্জিন ViewGroup
এর MarginLayoutParams
। (মাত্রাটি পিক্সেলগুলিতে সরবরাহ করতে হবে, আপনি ডিপি নিয়ে কাজ করতে চাইলে শেষ বিভাগটি দেখুন)
inline fun MarginLayoutParams.setMargins(@Px size: Int): Unit
// E.g. 16px margins
val params = (myView.layoutParams as ViewGroup.MarginLayoutParams)
params.setMargins(16)
updateMargins()
এক্সটেনশন ফাংশন:আপডেট মার্জিন ViewGroup
এর ViewGroup.MarginLayoutParams
।
inline fun MarginLayoutParams.updateMargins(
@Px left: Int = leftMargin,
@Px top: Int = topMargin,
@Px right: Int = rightMargin,
@Px bottom: Int = bottomMargin
): Unit
// Example: 8px left margin
params.updateMargins(left = 8)
updateMarginsRelative()
এক্সটেনশন ফাংশন:ViewGroup
এর MarginLayoutParams
(আপ / বাম / ডান পরিবর্তে শেষ) আপেক্ষিক মার্জিন আপডেট করে ।
inline fun MarginLayoutParams.updateMarginsRelative(
@Px start: Int = marginStart,
@Px top: Int = topMargin,
@Px end: Int = marginEnd,
@Px bottom: Int = bottomMargin
): Unit
// E.g: 8px start margin
params.updateMargins(start = 8)
নিম্নলিখিত এক্সটেনশন বৈশিষ্ট্যগুলি বর্তমান মার্জিনগুলি পাওয়ার জন্য কার্যকর:
inline val View.marginBottom: Int
inline val View.marginEnd: Int
inline val View.marginLeft: Int
inline val View.marginRight: Int
inline val View.marginStart: Int
inline val View.marginTop: Int
// E.g: get margin bottom
val bottomPx = myView1.marginBottom
dp
পরিবর্তে ব্যবহার px
:আপনি যদি এর dp
পরিবর্তে (ঘনত্ব-স্বাধীন পিক্সেল) দিয়ে কাজ করতে চান তবে আপনাকে px
প্রথমে সেগুলি রূপান্তর করতে হবে। আপনি নিম্নলিখিত এক্সটেনশন সম্পত্তি সহ এটি সহজেই করতে পারেন:
val Int.px: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
তারপরে আপনি আগের এক্সটেনশন ফাংশনগুলিকে কল করতে পারেন:
params.updateMargins(start = 16.px, end = 16.px, top = 8.px, bottom = 8.px)
val bottomDp = myView1.marginBottom.dp
পুরানো উত্তর:
কোটলিনে আপনি এই জাতীয় এক্সটেনশন ফাংশন ঘোষণা করতে পারেন:
fun View.setMargins(
leftMarginDp: Int? = null,
topMarginDp: Int? = null,
rightMarginDp: Int? = null,
bottomMarginDp: Int? = null
) {
if (layoutParams is ViewGroup.MarginLayoutParams) {
val params = layoutParams as ViewGroup.MarginLayoutParams
leftMarginDp?.run { params.leftMargin = this.dpToPx(context) }
topMarginDp?.run { params.topMargin = this.dpToPx(context) }
rightMarginDp?.run { params.rightMargin = this.dpToPx(context) }
bottomMarginDp?.run { params.bottomMargin = this.dpToPx(context) }
requestLayout()
}
}
fun Int.dpToPx(context: Context): Int {
val metrics = context.resources.displayMetrics
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this.toFloat(), metrics).toInt()
}
তারপরে আপনি এটিকে কল করতে পারেন:
myView1.setMargins(8, 16, 34, 42)
বা:
myView2.setMargins(topMarginDp = 8)