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



textview (6)

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

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


Answers

هذا قد يساعدك. هناك نوعان من الخصائص 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 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
);

لم أجد الطريق. لكن يبدو أنك تظهر كقائمة من العناصر. سيكون كل عنصر أفقيا LinearLayout مع imagesView من اليسار إلى اليمين والنص في الوسط. البعد صورة تفعل android: scaleType = "fitXY" لضبط ارتفاع الحجم إلى ارتفاع عرض النص. إذا كنت لا تريد تشويه الصورة ، استخدم scaleType = "CENTER_INSIDE". http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

<LinearLayout
     android:layout_width="fill_parent"
     android:id="@+id/HeaderList" 
     android:layout_gravity="top"
     android:layout_height="wrap_content" >  


     <ImageView
         android:id="@+id/backImg"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_centerInParent="true"
         android:adjustViewBounds="true"
         android:background="@color/blancotransless"
         android:src="@drawable/header"
         android:scaleType="fitXY" >
     </ImageView>

         <TextView 
             android:layout_height="wrap_content"
             android:layout_width="wrap_content" 
             android:id="@+id/NameText"
             android:text="The time of prayer" 
             android:textColor="#FFFFFF"
             android:textSize="30sp" 
             android:layout_alignParentLeft="true"
             android:layout_alignParentTop="true" 
             android:paddingLeft="4dp"
             android:paddingTop="4dp" 
             />
    <ImageView
         android:id="@+id/backImg"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_centerInParent="true"
         android:adjustViewBounds="true"
         android:background="@color/blancotransless"
         android:src="@drawable/header"
         android:scaleType="fitXY" >
     </ImageView>

</LinearLayout> 

يجب أن تكون الإجابة الوحيدة المقبولة هنا هي استخدام ImageView مع scaleTypes حسب المعتاد. يعمل Hacky للتغلب على حجم الصورة على TextView غير المدعومة بواسطة Android .. غير ضروري. استخدم SDK كما كان الغرض منه.


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

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


أنا ناضلت مع هذا لأكثر من أسبوع ، وأخيرا أحسب كيفية جعل هذا العمل!

كانت مشكلتي هي أن كل شيء سوف يتم التمرير على شكل "كتلة". كان النص نفسه يتم التمرير ، ولكن كمقطع بدلاً من خط تلو الآخر. من الواضح أن هذا لم ينجح بالنسبة لي ، لأنه سيقطع الخطوط في الأسفل. لم تنجح جميع الحلول السابقة بالنسبة لي ، لذا فقد قمت بصياغة هذه الحلول الخاصة بي.

هنا هو الحل الأسهل بكثير:

أنشئ ملفًا للفصل يسمى: "PerfectScrollableTextView" داخل الحزمة ، ثم انسخ هذا الرمز والصقه في:

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class PerfectScrollableTextView extends TextView {

    public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context) {
        super(context);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

وأخيرا ، قم بتغيير "TextView" الخاص بك في XML:

من: <TextView

إلى: <com.your_app_goes_here.PerfectScrollableTextView





android textview