对齐 imageView 和 textView(以及带边框的溢出文本)
Align imageView and textView (and overflow text with border)
我见过很多将文本视图与图像视图对齐的方法,但我没有找到当文本大于图像时以及当您希望文本占据所有父布局时的方法。我的布局是这样的:
<RelativeLayout
android:id="@+id/accordion_toogle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:id="@+id/accordion_image"
android:layout_width="@dimen/accor_img_wid"
android:layout_height="@dimen/accor_img_hei" />
<TextView
android:id="@+id/accordion_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/accordion_image"
android:paddingLeft="5dp"/>
</RelativeLayout>
在这种情况下,假设图像占据了 RelativeLayout 的一半,一旦 imageView 完成,accordion_msg 继续占据 relativeLayout 的一半。
你懂我吗??我表达的好吗??有什么建议吗??
谢谢。
编辑
一张图片可以帮助我尝试做的事情:
粉色方块是图片,紫色和白色矩形是文本必须放置的位置,但到目前为止,紫色是空的。文字只占白色方块
编辑 2
我正在尝试@Elltz 所说的...但我做不到我想要的,我有这个代码:
draw.setBounds(0, 0, width, height); //width: 128 height: 172 in this case
textview.setCompoundDrawablesRelative(draw, null, null, null);
但是没有显示图像,我尝试了很多其他的东西,比如:
textview.setCompoundDrawablesRelative(null, draw, null, null);
并且图像位于文本的顶部。我试过的其他不同的是:
textview.setCompoundDrawables(draw, null, null, null);
图像在左侧...但垂直居中对齐,图像的顶部和底部都是空白(没有文字,没有图片...什么都没有)。我尝试将父级更改为 LinearLayout,使用 gravity left、gravity top、RelativeLayout...
糟糕!!!现在布局是这样的:
<RelativeLayout
android:id="@+id/accordion_toogle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<TextView
android:id="@+id/accordion_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/accordion_image"
android:paddingLeft="5dp"/>
</RelativeLayout>
*父级的可见性并不重要,我通过编程方式更改它。
谢谢。
好的...经过艰苦的实验,搜索->尝试->失败->搜索->尝试->失败->搜索->尝试->成功;)
在 this stack question @K_Anas 中给出了解决方案...我将在这种情况下输入我为下一个案例所做的事情(此外,可以在文本上处理 link,解决它使用 Html.fromHtml 并在 SpannableString 之后保留 link 属性):
布局
<RelativeLayout
android:id="@+id/accordion_toogle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:visibility="gone"
android:gravity="top">
<ImageView
android:id="@+id/accordion_image"
android:layout_width="@dimen/img_width"
android:layout_height="@dimen/img_height"
android:src="@drawable/default_image"/>
<TextView
android:id="@+id/accordion_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"/>
</RelativeLayout>
Java代码
final TextView msgView = (TextView)view_aux.findViewById(R.id.accordion_msg);
String msg_text = dbStructure.getMsg();
if(msg_text.contains("href=\"")) {
String[] msg_aux = msg_text.split("href=\"");
if (!msg_aux[1].toLowerCase().startsWith("http"))
msg_aux[1] = "http://" + msg_aux[1];
msg_text = msg_aux[0] + "\"href=\"" + msg_aux[1];
}
msgView.setText(Html.fromHtml(msg_text));
msgView.setMovementMethod(LinkMovementMethod.getInstance());
int lines = (int)Math.round(height / msgView.getLineHeight());
SpannableString ss = new SpannableString(msgView.getText());
ss.setSpan(new MyLeadingMarginSpan2(lines, width+10), 0, ss.length(), 0);
msgView.setText(ss);
在这种情况下,宽度和高度是 ImageView 的度量值。
我见过很多将文本视图与图像视图对齐的方法,但我没有找到当文本大于图像时以及当您希望文本占据所有父布局时的方法。我的布局是这样的:
<RelativeLayout
android:id="@+id/accordion_toogle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:id="@+id/accordion_image"
android:layout_width="@dimen/accor_img_wid"
android:layout_height="@dimen/accor_img_hei" />
<TextView
android:id="@+id/accordion_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/accordion_image"
android:paddingLeft="5dp"/>
</RelativeLayout>
在这种情况下,假设图像占据了 RelativeLayout 的一半,一旦 imageView 完成,accordion_msg 继续占据 relativeLayout 的一半。
你懂我吗??我表达的好吗??有什么建议吗??
谢谢。
编辑
一张图片可以帮助我尝试做的事情:
粉色方块是图片,紫色和白色矩形是文本必须放置的位置,但到目前为止,紫色是空的。文字只占白色方块
编辑 2
我正在尝试@Elltz 所说的...但我做不到我想要的,我有这个代码:
draw.setBounds(0, 0, width, height); //width: 128 height: 172 in this case
textview.setCompoundDrawablesRelative(draw, null, null, null);
但是没有显示图像,我尝试了很多其他的东西,比如:
textview.setCompoundDrawablesRelative(null, draw, null, null);
并且图像位于文本的顶部。我试过的其他不同的是:
textview.setCompoundDrawables(draw, null, null, null);
图像在左侧...但垂直居中对齐,图像的顶部和底部都是空白(没有文字,没有图片...什么都没有)。我尝试将父级更改为 LinearLayout,使用 gravity left、gravity top、RelativeLayout...
糟糕!!!现在布局是这样的:
<RelativeLayout
android:id="@+id/accordion_toogle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<TextView
android:id="@+id/accordion_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/accordion_image"
android:paddingLeft="5dp"/>
</RelativeLayout>
*父级的可见性并不重要,我通过编程方式更改它。
谢谢。
好的...经过艰苦的实验,搜索->尝试->失败->搜索->尝试->失败->搜索->尝试->成功;) 在 this stack question @K_Anas 中给出了解决方案...我将在这种情况下输入我为下一个案例所做的事情(此外,可以在文本上处理 link,解决它使用 Html.fromHtml 并在 SpannableString 之后保留 link 属性):
布局
<RelativeLayout
android:id="@+id/accordion_toogle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"
android:visibility="gone"
android:gravity="top">
<ImageView
android:id="@+id/accordion_image"
android:layout_width="@dimen/img_width"
android:layout_height="@dimen/img_height"
android:src="@drawable/default_image"/>
<TextView
android:id="@+id/accordion_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"/>
</RelativeLayout>
Java代码
final TextView msgView = (TextView)view_aux.findViewById(R.id.accordion_msg);
String msg_text = dbStructure.getMsg();
if(msg_text.contains("href=\"")) {
String[] msg_aux = msg_text.split("href=\"");
if (!msg_aux[1].toLowerCase().startsWith("http"))
msg_aux[1] = "http://" + msg_aux[1];
msg_text = msg_aux[0] + "\"href=\"" + msg_aux[1];
}
msgView.setText(Html.fromHtml(msg_text));
msgView.setMovementMethod(LinkMovementMethod.getInstance());
int lines = (int)Math.round(height / msgView.getLineHeight());
SpannableString ss = new SpannableString(msgView.getText());
ss.setSpan(new MyLeadingMarginSpan2(lines, width+10), 0, ss.length(), 0);
msgView.setText(ss);
在这种情况下,宽度和高度是 ImageView 的度量值。