[英]How to align TextView around an ImageView?
我試圖在ImageView周圍對齊TextView。 我使用以下代碼:
private void createSpannableText(){
TextView myTextView = (TextView) findViewById(R.id.textView);
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(this.getText(R.string.loren__ipsum__max));
int lengthOfPart1 = builder.length();
builder.append(" ");
builder.append(this.getText(R.string.lorem__ipsum));
Drawable d = getResources().getDrawable(R.drawable.myImage);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // <---- Very important otherwise your image won't appear
ImageSpan myImage = new ImageSpan(d);
builder.setSpan(myImage, 0, lengthOfPart1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTextView.setText(builder);
}
但無法得到確切的結果。 我該怎么辦? 在這種情況下我需要使用SpannableStringBuilder還是有另一種方法。 請幫忙。 我使用這個帖子http://majaxandroidtips.blogspot.in/2009/06/how-to-have-few-layout-elements-wrap_17.html來獲得解決方案。
PS:我還希望ImageView周圍有6dp的邊距
您可以使用API 8中提供的android.text.style.LeadingMarginSpan.LeadingMarginSpan2
接口來實現此目的。 這篇文章不是英文,而是使用您的瀏覽器進行翻譯。 此外,您可以直接從這里下載示例的源代碼。
你的布局:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<TextView
android:textSize="18.0sp"
android:id="@+id/message_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/text" />
<ImageView
android:src="@drawable/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/icon" />
</RelativeLayout>
Helper類實現了LeadingMarginSpan.LeadingMarginSpan2
class MyLeadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2 {
private int margin;
private int lines;
MyLeadingMarginSpan2(int lines, int margin) {
this.margin = margin;
this.lines = lines;
}
/* Возвращает значение, на которе должен быть добавлен отступ */
@Override
public int getLeadingMargin(boolean first) {
if (first) {
/*
* Данный отступ будет применен к количеству строк
* возвращаемых getLeadingMarginLineCount()
*/
return margin;
} else {
// Отступ для всех остальных строк
return 0;
}
}
@Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir,
int top, int baseline, int bottom, CharSequence text,
int start, int end, boolean first, Layout layout) {}
/*
* Возвращает количество строк, к которым должен быть
* применен отступ возвращаемый методом getLeadingMargin(true)
* Замечание:
* Отступ применяется только к N строкам первого параграфа.
*/
@Override
public int getLeadingMarginLineCount() {
return lines;
}
};
您的活動代碼:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String text = getString(R.string.text);
// Получаем иконку и ее ширину
Drawable dIcon = getResources().getDrawable(R.drawable.icon);
int leftMargin = dIcon.getIntrinsicWidth() + 10;
// Устанавливаем иконку в R.id.icon
ImageView icon = (ImageView) findViewById(R.id.icon);
icon.setBackgroundDrawable(dIcon);
SpannableString ss = new SpannableString(text);
// Выставляем отступ для первых трех строк абазца
ss.setSpan(new MyLeadingMarginSpan2(3, leftMargin), 0, ss.length(), 0);
TextView messageView = (TextView) findViewById(R.id.message_view);
messageView.setText(ss);
}
最后這里是一個演示結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.