textappearance - textview android xml




هل من الممكن توسيع نطاق drawableleft و drawableright في عرض النص؟ (4)

فقط اجعل الخلفية ذات 9 مسارات تكرر هذا النمط.

ويبدو أيضًا أنه سيكون من الأفضل البحث في حالة تطبيق النمط على القائمة ، وليس على العنصر الفردي.

لدي قائمة مع العنصر هو TextView . واستخدام drawableleft & drawableright beutify في TextView . المشكلة هي أنه كلما زاد حجم النص في طريقة عرض النص ، لم يتم تلقائيًا تغيير حجم drawableleft & drawableleft بناءً على ارتفاع TextView .

هل من الممكن قياس ارتفاع drawableleft و drawableright في عرض النص؟ (كنت تستخدم 9 صورة التصحيح)


لقد حللت usecase مكافئة من خلال تقديم ScaleDrawable وتجاوز .getIntrisicHeight() بحيث يكون على الأقل TextView الارتفاع. TextView.addOnLayoutChangeListener الجزء TextView.addOnLayoutChangeListener ، المطلوب لإعادة Drawable على تغيير حجم TextView مع API11 +

Drawable underlyingDrawable = 
        new BitmapDrawable(context.getResources(), result);

// Wrap to scale up to the TextView height
final ScaleDrawable scaledLeft = 
        new ScaleDrawable(underlyingDrawable, Gravity.CENTER, 1F, 1F) {
    // Give this drawable a height being at
    // least the TextView height. It will be
    // used by
    // TextView.setCompoundDrawablesWithIntrinsicBounds
    public int getIntrinsicHeight() {
        return Math.max(super.getIntrinsicHeight(), 
                        competitorView.getHeight());
    };
};

// Set explicitly level else the default value
// (0) will prevent .draw to effectively draw
// the underlying Drawable
scaledLeft.setLevel(10000);

// Set the drawable as a component of the
// TextView
competitorView.setCompoundDrawablesWithIntrinsicBounds(
        scaledLeft, null, null, null);

// If the text is changed, we need to
// re-register the Drawable to recompute the
// bounds given the new TextView height
competitorView.addOnLayoutChangeListener(new OnLayoutChangeListener() {

    @Override
    public void onLayoutChange(View v, int left, int top, int right, 
            int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        competitorView.setCompoundDrawablesWithIntrinsicBounds(scaledLeft, null, null, null);
    }
});

نأمل أن تكون هذه المساعدة

Textview tv = (TextView) findViewById(R.id.tv_dummy)
int imageResource =  R.mipmap.ic_image;
Drawable drawable = ContextCompat.getDrawable(context, imageResource);
int pixelDrawableSize = (int)Math.round(tv.getLineHeight() * 0.7); // Or the percentage you like (0.8, 0.9, etc.)
drawable.setBounds(0, 0, pixelDrawableSize, pixelDrawableSize); // setBounds(int left, int top, int right, int bottom), in this case, drawable is a square image
tv.setCompoundDrawables(
 null, //left
 null, //top
 drawable, //right
 null //bottom
);

هذا قد يساعدك. هناك نوعان من الخصائص scaleX و scaleY

الكود أدناه سوف يخفض الصورة والنص بنسبة 30٪. لذلك يجب عليك زيادة حجم الخط باستخدام هذا العدد "sp" ، بحيث عندما يتم إعادة تحجيمه (تحجيمه) فإنه يناسب "sp" الذي تفضله.

مثال. إذا قمت بتعيين الخط على 18 ، فإن 30٪ من أصل 18 هي 5.4sp ، لذلك تقريبًا ، هذه هي القيمة التي أستهدفها ، لأنه عندما يتم قياسه ، فسيصبح 13sp

<TextView
        android:textSize="18sp"
        android:scaleX="0.7"
        android:scaleY="0.7"

آخر شيء فعله هو تعيين CompundDrawable.

tview.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.xxx), null, null, null);




textview