سؤال

يقوم Android TextView بقص نصوصي النصية (انظر الصورة أدناه) حتى عندما أستخدمها android:layout_height="wrap_content" لعرض النص.هل هناك حل/حل بديل لهذا؟

alt text

ملاحظة:تعمل النصوص الفوقية بشكل جيد

ملحوظة: الحشو لا يعمل.

  • لقد حاولت حتى إضافة حشوة 50 تراجع ولكنه لم يساعد.
  • يمكنني استخدام الارتفاع المطلق مثل 50 تراجع لكن هذا يفسد كل شيء عندما أحتاج إلى التفاف النص.

عينة من الرموز:

mtTextView.setText(Html.fromHtml("HC0<sub>3</sub>"));

هل كانت مفيدة؟

المحلول

هذا الحل عملت بالنسبة لي.

عادة ما يكون النص المرتفع أصغر عندما يعرضه المتصفح، ويبدو أن هذا لا يحدث هنا لذا يمكنك تكرار ذلك (وحل هذه المشكلة) عن طريق القيام بذلك:

someTextView.setText(Html.fromHtml("Some text<sup><small>1</small></sup>"));

نصائح أخرى

تقترح معظم الإجابات إضافة حشوات أو استخدام نصوص فرعية/مرتفعة أصغر.قد تكون هذه حلولاً مفيدة، لكنها لا تحل المشكلة حقًا.من الناحية المثالية، نريد أن يأخذ Android الحرف الفرعي/المرتفع في الاعتبار عند حساب ارتفاع الخط.أعتقد أنني وجدت كيفية القيام بذلك، وأنا أشاركها مع الأشخاص الذين يبحثون عن هذه المشكلة على Google.

    SpannableStringBuilder sb = new SpannableStringBuilder("X2");
    sb.setSpan(new SuperscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(sb, BufferType.SPANNABLE);

الحيلة موجودة في BufferType.SPANNABLE.يبدو أنه يجعل TextView يولي المزيد من الاهتمام للترميز ويحسب ارتفاعات الأسطر بشكل صحيح.

بالنسبة للخط السفلي، هناك حاجة إلى تغيير طفيف في الاقتراح أعلاه، وعلامتين صغيرتين:

    textView.setText(Html.fromHtml(
        "HCO<sub><small><small>3</small></small></sub>));

الروبوت: lineSpacingExtra = "4dp" يجب حلها سيؤدي هذا إلى إضافة تباعد إضافي للأسطر أسفل النص الخاص بك ، والحفاظ على الخط المنخفض من القطع.لم أجربه باستخدام النص المرتفع، لذا قد يصلح ذلك الآن.

لقد واجهت نفس المشكلة، لذلك بعد قراءة المشاركات، وجدت أن هذا يعمل.

مثال :ح2يا
ببساطة استخدم:

textView.setText(Html.fromHtml("H<sub>2</sub>O"),BufferType.SPANNABLE);

يعد BufferType.SPANNABLE مهمًا لأنه سيخبر textview بأن يأخذ في الاعتبار النطاق المرتفع.

إذا كنت تستخدم معالج علامات مخصص لـ HTML، فيمكنك استخدامه أيضًا على النحو التالي:

 textView.setText(Html.fromHtml(data, null, new CustomHtmlTagHandler(),BufferType.SPANNABLE);

نأمل أن يساعد شخص يبحث عن نفس المشكلة.

أنا أعرض الكسور والأرقام الكسرية لذا أستخدم كلاً من السوبر والاشتراك معًا.لم يعمل Html.fromHtml بالنسبة لي، إما أنه تم قص الجزء العلوي أو السفلي.

ومن الغريب أن الأعداد الكسرية تعمل بشكل صحيح، لكن الكسور في حد ذاتها لا تعمل.

انتهى بي الأمر باستخدام SpannableString مع SubscriptSpan أو SuperscriptSpan، ثم ضبط حجم الخط في TextAppearanceSpan.

وبمجرد الانتهاء من ذلك، اضطررت إلى توسيع ارتفاع TextView أيضًا.

TextView number = (TextView)findViewById(R.id.number);
String temp = "1 1/2";
SpannableString s = new SpannableString(temp);
// if the string has a fraction in it, superscript the numerator and subscript the denominator
if (temp.indexOf('/') != -1)
{
    int len = temp.length();
    s.setSpan(new SuperscriptSpan(), len - 3, len - 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 3, len - 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 2, len - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new SubscriptSpan(), len - 1, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 1, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
number.setText(s);

ثم اضطررت إلى توسيع الارتفاع:

RelativeLayout.LayoutParams parms = (RelativeLayout.LayoutParams)number.getLayoutParams();
Rect frame = CalcSize(number.getTextSize(), quantityMaxString);
parms.height = frame.height() + fractionAdjustment;
number.setLayoutParams(parms);

تقوم الدالة CalcSize بإرجاع مستطيل محيط بأكبر سلسلة في مصفوفة عناصر العرض.

FractionAdjustment هي قيمة محددة تجريبيًا تعمل مع حجم الخط المحدد المضبوط لهندسة الشاشة.

ملحوظة:هذا هو TextView داخل ListView، لذلك قد يكون لذلك بعض التأثير أيضًا.

// calculate the field dimensions, given the font size and longest string
private static Rect CalcSize(float fontSize, String maxString)
{
    Rect bounds = new Rect();
    paint.setTypeface(Typeface.DEFAULT);
    paint.setTextSize(fontSize);

    paint.getTextBounds(maxString, 0, maxString.length(), bounds);

    return bounds;
}

القيم التجريبية:

fractionAdjustment = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, resources.getDisplayMetrics());
fractionFontSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 11, resources.getDisplayMetrics());

لقد واجهت نفس المشكلة في ICS وإصدارات Android أدناه.لقد أصلحت المشكلة بخطوة بسيطة

إعطاء الحد الأدنى من الارتفاع لعرض النص.وسوف يحل المشكلة.

يمكنك ضبط الحد الأدنى للارتفاع من خلال ملف XML.

        android:minHeight="30dp"

أو ديناميكيا

 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {

            tv.setMinHeight(52);
    }

لقد نجح هذا بالنسبة لي مع صغير بطاقة شعار.

  1. داخل إضافة TextView

الروبوت: الحشو أسفل = "1dp"

  1. استخدم العلامة الصغيرة بعد الحرف المنخفض

yourTextView.setText(Html.fromHtml("" +" Hey< sub >< صغير >2< /small > </sub >"));

ملحوظة يرجى ملاحظة أن الخطوة 1 مهمة، وكان النص الخاص بي لا يزال مقطوعًا في بعض الحالات، وقد تم حل المشكلة باستخدام paddingBottom.لا تنس إزالة المسافات في العلامات الفرعية والصغيرة الموجودة في إجابتي :)

كلما زاد عدد العلامات <small> </small> الموجودة هناك، أصبح الخط السفلي أصغر ويجب أن تتمكن من رؤيته دون قصه.

على سبيل المثال:ح2يا

Html.fromHtml("H<sub><small><small><small>2</small></small></small></sub>O");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top