android:在textView中适合DrawableLeft的高度

26 android drawable

我试图在一个文本块旁边显示一条蓝线,非常像这样:

在此输入图像描述

这是我的代码:

<TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/blue_line" />
Run Code Online (Sandbox Code Playgroud)

blue_line是一个jpg文件.一个蓝色的矩形.无论textview中的文本如何,它都以原始大小显示.如何根据文字的高度动态调整其高度?比如当文字少量文字时缩短,文字更多时更长......

vip*_*tal 30

您可以通过设置图像的边界来尝试在代码中执行此操作

textView1.getViewTreeObserver()
        .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            Drawable img = ActivityName.this.getContext().getResources().getDrawable(
                R.drawable.blue_line);
            img.setBounds(0, 0, img.getIntrinsicWidth() * textView1.getMeasuredHeight() / img.getIntrinsicHeight(), textView1.getMeasuredHeight());
            textView1.setCompoundDrawables(img, null, null, null);
            textView1.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });
Run Code Online (Sandbox Code Playgroud)


Dro*_*ris 6

最好的方法是将drawable包装在xml可绘制文件中,并在文本视图中将其设置为drawable,如下所示:

可绘制的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:scaleType="fitXY"
    android:src="@drawable/total_calories"/>
Run Code Online (Sandbox Code Playgroud)

XML中的TextView:

<TextView 
    android:id="@+id/title_total_cal"
    style="@style/title_stats_textview"
    android:drawableLeft="@drawable/total_calories_drawable"/>
Run Code Online (Sandbox Code Playgroud)

  • 你试过这个吗?对我不起作用(虽然应用于按钮).图像仍然被裁剪. (11认同)

Ham*_*atu 4

尝试如下...

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/btndr" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/imageView" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)