আমি যদি TextView
জাভা কোড ব্যবহার করে নির্দিষ্ট পাঠ্যের আকার পরিবর্তন করতে একটি পূর্ণসংখ্যার মান নির্ধারণ করি তবে মানটি পিক্সেল ( px
) হিসাবে ব্যাখ্যা করা হয় ।
এখন কেউ কীভাবে এটি নির্ধারণ করতে জানে sp
?
আমি যদি TextView
জাভা কোড ব্যবহার করে নির্দিষ্ট পাঠ্যের আকার পরিবর্তন করতে একটি পূর্ণসংখ্যার মান নির্ধারণ করি তবে মানটি পিক্সেল ( px
) হিসাবে ব্যাখ্যা করা হয় ।
এখন কেউ কীভাবে এটি নির্ধারণ করতে জানে sp
?
উত্তর:
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
উদাহরণ:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
আপনার পাঠ্য আকারটি এইভাবে পাওয়া ইতিমধ্যে এসপিটিকে পিএক্সে রূপান্তরিত করবে, পর্দার ঘনত্ব এবং পাঠ্য স্কেল উভয় ফ্যাক্টরকে বিবেচনা করে।
আপনি একটি ব্যবহার করতে পারেন DisplayMetrics
পিক্সেল এবং ছোটো পিক্সেল মধ্যে সাহায্য রূপান্তর করতে বস্তুর scaledDensity
বৈশিষ্ট্য ।
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
may be adjusted in smaller increments at runtime based on a user preference for the font size
যাতে ফন্টের আকারটি বিবেচনায় নেওয়া হবে ।
ক্লিনার এবং আরও পুনরায় ব্যবহারযোগ্য পদ্ধতি হল
ডিরেক্টরি dimens.xml
ভিতরে ফাইলের পাঠ্য আকার নির্ধারণ করুন res/values/
:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
এবং তারপরে এটি প্রয়োগ করুন TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
উত্সের কোডের ভিত্তিতে setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
আমি এই ফাংশনটি পিক্সেলগুলিতে কোনও ডিমেনশন ক্যালিউট করার জন্য তৈরি করি:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
যেখানে ইউনিট কিছু হয় TypedValue.COMPLEX_UNIT_SP
।
ডিফল্ট সেট টেক্সটসাইজ অনুসারে, এসপিতে ইউনিট কাজ না করে (স্কেলগুলি পিক্সেল)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
ধন্যবাদ @ জন লিহে এবং @ পিটারএইচ:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
আপনি যদি আপনার মাত্রা.এক্সএমএলে আর.ডিইমেন.ডিজায়ার_এসপি 25 থেকে সংজ্ঞায়িত করেন তবে জিনিসটি হ'ল
যখন গৃহীত উত্তরটি কাজ না করে (উদাহরণস্বরূপ পেইন্টের সাথে কাজ করার সময়) আপনি ব্যবহার করতে পারেন:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
COMPLEX_UNIT_PX
ঘনত্বকে ভাগ করতে হবে।
এটি পিএক্সকে এসপি ফর্ম্যাটে রূপান্তর করার কোড । 100% কাজ
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
এপি স্তর 1 থেকে আপনি public void setTextSize (float size)
পদ্ধতিটি ব্যবহার করতে পারেন ।
ডকুমেন্টেশন থেকে:
প্রদত্ত মানটিতে ডিফল্ট পাঠ্য আকার সেট করুন, "স্কেলড পিক্সেল" ইউনিট হিসাবে ব্যাখ্যা করা। এই আকারটি বর্তমান ঘনত্ব এবং ব্যবহারকারী ফন্টের আকারের পছন্দ অনুসারে সামঞ্জস্য করা হয়েছে।
পরামিতি: আকার -> ভাসা: স্কেলড পিক্সেল আকার।
সুতরাং আপনি সহজ করতে পারেন:
textView.setTextSize(12); // your size in sp