对齐imageView和textView(以及带边框的溢出文本)

时间:2015-02-19 01:14:06

标签: android android-layout textview imageview alignment

我已经看到很多方法可以将textview与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的一半。

你了解我吗?我表达得好吗?有什么建议??

谢谢。

修改 帮助我尝试做的照片: the desired design

粉红色正方形是图片,紫色和白色矩形是文本必须的位置,但直到现在,紫色是空的。文字只占据白色方块。

编辑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);

图像在左侧...但它在中心垂直对齐,图像的顶部和底部是空白的(没有文字,没有图片......没有任何东西)。我尝试使用重力左,重力顶部,RelativeLayout ......

将父级更改为LinearLayout

Oooppsss !!!现在布局是这样的:

<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>

*父级的可见性并不重要,我以编程方式更改它。

谢谢。

1 个答案:

答案 0 :(得分:0)

好的......经过艰苦的实验,搜索 - &gt; attempting-&GT; failing-&GT; searching-&GT; attempting-&GT; failing-&GT; searching-&GT; attempting-&GT;成功;) 在this stack question @K_Anas给出了解决方案......我将在下一种情况下键入我对此情况的处理方式(此外,可以处理文本上的链接,使用Html.fromHtml解析它并保留链接SpannableString之后的属性:

布局

 <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的测量。