لتعيين حجم النص في TextView بناءً على حجم الشاشة وتحجيمه بشكل ديناميكي بناءً على ارتفاع وعرض الشاشة دون الحاجة إلى إنشاء مجلدات مختلفة بناءً على الدقة في Android، يمكنك استخدام تقنية تسمى “Scaled Density” و “Density Independent Pixels (dp)”.
في البداية، يجب عليك تحديد حجم النص الافتراضي الذي ترغب في استخدامه على أصغر حجم شاشة تستهدفه. يمكنك القيام بذلك في ملف res/values/dimens.xml على النحو التالي:
xml<resources>
<dimen name="default_text_size">16spdimen>
resources>
ثم، يمكنك استخدام هذا الحجم لتحديد حجم النص في TextView في ملف الـ layout الخاص بك، على سبيل المثال:
xml<TextView
android:id="@+id/my_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="@dimen/default_text_size" />
الآن، لتكييف حجم النص بناءً على حجم الشاشة، يمكنك استخدام متغيرات الـ density المتاحة في Android، مثل الـ “scaled density”، لضبط حجم النص بناءً على كثافة الشاشة. يمكنك استخدام الكود التالي في الـ Activity الخاص بك:
javaDisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float scaleFactor = displayMetrics.scaledDensity;
int defaultTextSize = getResources().getDimensionPixelSize(R.dimen.default_text_size);
int scaledTextSize = (int) (defaultTextSize * scaleFactor);
TextView textView = findViewById(R.id.my_text_view);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, scaledTextSize);
باستخدام هذا الكود، سيتم ضبط حجم النص تلقائيًا بناءً على كثافة الشاشة بحيث يكون متناسبًا مع حجم الشاشة بشكل عام، دون الحاجة إلى إنشاء مجلدات مختلفة بناءً على الدقة.
المزيد من المعلومات
بالتأكيد! بعد تحديد الحجم الافتراضي للنص، يمكنك استخدام معادلة بسيطة لتحديد حجم النص بناءً على حجم الشاشة. يمكنك القيام بذلك في كود الـ Java الخاص بنشاطك كما يلي:
javaDisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float screenWidth = displayMetrics.widthPixels / displayMetrics.density;
float screenHeight = displayMetrics.heightPixels / displayMetrics.density;
float scale = Math.min(screenWidth, screenHeight) / yourReferenceScreenSize;
TextView textView = findViewById(R.id.my_text_view);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.default_text_size) * scale);
حيث يكون yourReferenceScreenSize
هو حجم الشاشة التي قمت بتحديدها كمرجع لحجم النص. على سبيل المثال، إذا قمت بتحديد حجم النص بناءً على حجم شاشة 320dp في العرض، يمكنك استخدام 320dp كـ yourReferenceScreenSize
.
باستخدام هذا الكود، سيتم تحديد حجم النص بشكل ديناميكي بناءً على حجم شاشة الجهاز، مما يسمح بتوفير تجربة مستخدم متجاوبة مع جميع أحجام الشاشات دون الحاجة إلى إنشاء مجلدات مختلفة لكل دقة.