আমি আমার অ্যাপ্লিকেশনটিতে আমার নিজের পাঠ্য আকারটি নির্দিষ্ট করতে চাই, তবে এটি করতে আমার সমস্যা হচ্ছে।
আমি যখন ডিভাইস সেটিংসে ফন্টের আকার পরিবর্তন করি তখন আমার অ্যাপ্লিকেশনের ফন্টের আকারও TextView
পরিবর্তন হয়।
আমি আমার অ্যাপ্লিকেশনটিতে আমার নিজের পাঠ্য আকারটি নির্দিষ্ট করতে চাই, তবে এটি করতে আমার সমস্যা হচ্ছে।
আমি যখন ডিভাইস সেটিংসে ফন্টের আকার পরিবর্তন করি তখন আমার অ্যাপ্লিকেশনের ফন্টের আকারও TextView
পরিবর্তন হয়।
উত্তর:
প্রকৃতপক্ষে, সেটিংস ফন্টের আকারটি কেবলমাত্র আকারগুলিকেই প্রভাবিত করে sp
। সংজ্ঞায়িত - সব সুতরাং আপনি যা করতে হবে textSize
সালে dp
পরিবর্তে sp
, তারপর সেটিংস আপনার অ্যাপে লেখার আকার পরিবর্তন করবে না।
এখানে ডকুমেন্টেশনের লিঙ্ক রয়েছে: মাত্রা
তবে দয়া করে নোট করুন যে প্রত্যাশিত আচরণটি হ'ল সমস্ত অ্যাপ্লিকেশনে হরফ ব্যবহারকারীদের পছন্দকে সম্মান করে। কোনও ব্যবহারকারী ফন্টের আকারগুলি সামঞ্জস্য করতে চাইতে পারে এমন অনেকগুলি কারণ রয়েছে এবং এর মধ্যে কিছু চিকিত্সা - দৃষ্টি প্রতিবন্ধী ব্যবহারকারীও হতে পারে। পাঠ্যের dp
পরিবর্তে ব্যবহার sp
করা অনিচ্ছাকৃতভাবে আপনার অ্যাপের কিছু ব্যবহারকারীর সাথে বৈষম্যমূলক আচরণ করতে পারে।
অর্থাৎ,
android:textSize="32dp"
sp
এবং কখন ব্যবহার করা উচিত সে সম্পর্কে কোনও নিয়ম ছিল কিনা dp
। আমি এখানে সত্যিই একটি ভাল প্রতিক্রিয়া পেয়েছি: stackoverflow.com/questions/11638691/…
এর মধ্যে সবচেয়ে সহজটি হল নীচের মতো কিছু ব্যবহার করা:
android:textSize="32sp"
আপনি যদি textSize
সম্পত্তি সম্পর্কে আরও জানতে চান তবে অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন পরীক্ষা করতে পারেন ।
ব্যবহার করুন dimension
সম্পদের টাইপ মত আপনি ব্যবহার string
সম্পদগুলি ( দস্তাবেজ )।
আপনার dimens.xml
ফাইলে, আপনার মাত্রা ভেরিয়েবলগুলি ঘোষণা করুন:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_height">25dp</dimen>
<dimen name="textview_width">150dp</dimen>
<dimen name="ball_radius">30dp</dimen>
<dimen name="font_size">16sp</dimen>
</resources>
তারপরে আপনি এই মানগুলি ব্যবহার করতে পারেন:
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
dimens.xml
বিভিন্ন ধরণের স্ক্রিনের জন্য আপনি বিভিন্ন ফাইল ঘোষণা করতে পারেন । এটি করার ফলে বিভিন্ন ডিভাইসে আপনার অ্যাপ্লিকেশনটির পছন্দসই চেহারা গ্যারান্টিযুক্ত হবে।
আপনি যখন android:textSize
সিস্টেমটি নির্দিষ্ট করবেন না তখন ডিফল্ট মানগুলি ব্যবহার করা হয়।
ইতিমধ্যে একটি মাত্রা.এক্সএমএল ফাইলে সংজ্ঞায়িত হয়ে কোডের মাধ্যমে আবার ডিআইপি বা এসপি নির্দিষ্ট করা ভাল জিনিস নয়।
আমি মনে করি যে মাত্রা.এক্সএমএল মান ব্যবহার করার সময় সেরা বিকল্প হ'ল পিএক্স ব্যবহার করা:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size));
এইভাবে, আপনি কোনও কোড পরিবর্তন না করেই Dime.xML ফাইলে প্রয়োজনে ডিপি থেকে এসপিতে স্যুইচ করতে পারেন।
সিস্টেম ফন্টের আকার দ্বারা পুরো অ্যাপ্লিকেশনটিকে প্রভাবিত হতে বাধা দেওয়ার সহজ উপায় হ'ল বেস ক্রিয়াকলাপটি আপডেট করে কনফিগারেশন।
//in base activity add this code.
public void adjustFontScale( Configuration configuration) {
configuration.fontScale = (float) 1.0;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
এটি সাহায্য করতে পারে। আপনার কাস্টম অ্যাপ্লিকেশন বা বেসঅ্যাক্টিভিটিতে কোড যুক্ত করুন
/**
* 重写 getResource 方法,防止系统字体影响
*
* @return
*/
@Override
public Resources getResources() {
Resources resources = super.getResources();
if (resources != null && resources.getConfiguration().fontScale != 1) {
Configuration configuration = resources.getConfiguration();
configuration.fontScale = 1;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}
return resources;
}
তবে রিসোর্স # আপডেট কনফিগারেশনটি এপিআই 25 স্তরে বর্ণিত হয়েছে, যার অর্থ এটি ভবিষ্যতে কোনও দিন অসমর্থিত হবে।
আপনি এই কোডটি ব্যবহার করতে পারেন:
android:textSize="32dp"
এটি আপনার সমস্যার সমাধান করে তবে আপনাকে অবশ্যই জানতে হবে যে আপনার ব্যবহারকারীর সিদ্ধান্তকে সম্মান করা উচিত। এর দ্বারা, ডিভাইস সেটিংস থেকে পাঠ্যের আকার পরিবর্তন করা এই মানটি পরিবর্তন করবে না। তাই আপনাকে ডিপি পরিবর্তে এসপি ব্যবহার করতে হবে । সুতরাং আমার পরামর্শটি হ'ল আপনার অ্যাপ্লিকেশনটিকে বিভিন্ন সিস্টেম ফন্টের আকার (ছোট, সাধারণ, বড়, ...) দিয়ে পর্যালোচনা করা
কোটলিনের জন্য, এটি আমার পক্ষে কাজ করে
priceTextView.textSize = 12f
ব্যবহৃত ইউনিটগুলি যদি ডিপি নয়, এসপি হয় এবং আপনি সিস্টেম ফন্ট স্কেলিংকে ওভাররাইড করতে চান তবে আপনারা যা কিছু করেন তা ক্রিয়াকলাপে একটি পদ্ধতিকে ওভাররাইড করে - এই পোস্টটি দেখুন ।
রিসোর্সস.আপডেট কনফিগারেশন অবচিত এবং বগী (ওরিওতে আমার ফর্ম্যাটযুক্ত পাঠ্য নিয়ে সমস্যা ছিল)।
getResources()
ক্রিয়াকলাপে ওভাররাইড ।
পাঠ্যদর্শনটির আকারটি যথারীতি এসপি তে সেট করুন android:textSize="32sp"
override fun getResources(): Resources {
return super.getResources().apply {
configuration.fontScale = 1F
updateConfiguration(configuration, displayMetrics)
}
}
অ্যান্ড্রয়েড 8 এ এই সমাধানটি আমার পক্ষে কাজ করে
বেস ক্রিয়াকলাপে এই কোডটি যুক্ত করুন
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
final Configuration override = new Configuration(newBase.getResources().getConfiguration());
override.fontScale = 1.0f;
applyOverrideConfiguration(override);
}