我有一个TextView,居中文本可以跨越两行。有时,CompoundDrawable出现并与文本的第一行对齐。在这种情况下,我希望文本的第二行与整个第一行对齐(即drawable + text)。当前仅与文本对齐。
这是TextView xml:
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constrainedWidth="true"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="@dimen/margin_small"
android:layout_marginEnd="@dimen/margin_medium"
android:layout_marginTop="@dimen/margin_small"
android:layout_marginStart="@dimen/margin_medium"
android:gravity="center"
android:maxLines="2"
app:layout_constraintBottom_toTopOf="@+id/item_subtitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/item_icon"
app:layout_goneMarginStart="@dimen/margin_medium"
tools:text="Headline longer than than the one line name and some more info Headline longer than than the one line name and some more inf"/>
这是针对compoundDrawable的(我使用this解决方案将可绘制对象对齐到第一行):
val innerDrawable =itemView.resources.getDrawable(R.drawable.ic_item_indicator_premium)
val premiumCompoundDrawable = PremiumCompoundDrawable(innerDrawable)
innerDrawable.setBounds(0,0,innerDrawable.intrinsicWidth, innerDrawable.intrinsicHeight)
premiumCompoundDrawable.setBounds(0, 0, innerDrawable.intrinsicWidth, innerDrawable.intrinsicHeight)
titleTextView.setCompoundDrawables(premiumCompoundDrawable, null, null, null)
答案 0 :(得分:0)
您可以使用Spannable String满足如下要求:
XML文件:
<ImageView
android:id="@+id/item_icon"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/table_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="20dp"/>
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constrainedWidth="true"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="5dp"
android:layout_marginEnd="2dp"
android:layout_marginTop="5dp"
android:layout_marginStart="2dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/item_icon"
app:layout_goneMarginStart="8dp"
android:maxLines="2"
android:text=" Headline longer than than the one line name and some more info Headline longer than than the one line name and some more inf"/>
在Java中
itemTitle=findViewById(R.id.item_title);
ImageSpan imageSpan = new ImageSpan(this, R.drawable.ic_star); //Find your drawable.
SpannableString spannableString = new SpannableString(itemTitle.getText()); //Set text of SpannableString from TextView
spannableString.setSpan(imageSpan, 0, itemTitle.getText().length()+1-itemTitle.getText().length(), 0); //Add image at end of string
itemTitle.setText(spannableString);
在科特林:
val imageSpan = ImageSpan(this, R.drawable.ic_star) //Find your drawable.
val spannableString = SpannableString(item_title.text) //Set text of SpannableString from TextView
spannableString.setSpan(
imageSpan,
0,
item_title.text.length + 1 - item_title.text.length,
0
) //Add image at start of string
item_title.setText(spannableString)
输出为:
希望它对您有用。