Android RelativeLayout最小宽度

时间:2015-12-17 23:51:11

标签: android xml android-layout layout chat


我正在Android中开发一个Messenger应用程序,为此我有一个RelativeLayout包含文本消息和一些关于它的信息。我目前的xml代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/text_message"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="6dp">
    <RelativeLayout
        android:id="@+id/chat_message_inner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/bubble_a1"
        android:padding="1dp">
        <TextView
            android:id="@+id/text_message_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_gravity="center"
            android:layout_margin="5dp"
            android:text="Hello World"
            android:textColor="@android:color/black"
            android:textSize="@dimen/font_size"/>
        <RelativeLayout
            android:id="@+id/text_message_info"
            android:layout_width="45dp"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/text_message_text"
            android:layout_toEndOf="@id/text_message_text"
            android:padding="3dp">
            <TextView
                android:id="@+id/chat_timeStamp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/chat_status"
                android:text="00:00"
                android:textColor="@color/colorTimeStamp"/>
            <ImageView
                android:id="@+id/chat_status"
                android:layout_width="19dp"
                android:layout_height="13dp"
                android:layout_alignEnd="@+id/chat_timeStamp"
                android:layout_alignRight="@+id/chat_timeStamp"
                android:layout_marginEnd="2dp"
                android:layout_marginRight="2dp"
                android:layout_marginTop="6dp"
                android:src="@drawable/two_grey_hook"/>
        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

小消息看起来很好(Hello World Message),大型消息到达多行但是,使信息布局消失(Longer Message)。 有没有办法避免这个问题?如果我坚持使用RelativeLayouts并不重要,我觉得它是最可定制的。

另外,我知道在这个代码提取中,似乎两个周围的布局可以合并为一个,但是,因为我想根据发送消息但不希望背景气泡拉伸来设置布局的重力在整个宽度上。

如果您愿意,我会感谢您提供任何帮助,并且还可以提供任何其他代码段。

感谢GG15

修改

我使用该消息的布局只是一个ListView,然后我扩展了一个ArrayAdapter以添加单个消息。我的getView函数基本上如下(我稍微缩短了一点):

public View getView(int position, View ConvertView, ViewGroup parent){
    View v = ConvertView;
    MessageArrayContent Obj = getItem(position);

    if (Obj.getClass() == TextMessage.class){
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      v = inflater.inflate(R.layout.text_message, parent, false);

      TextMessage msgObj = (TextMessage) Obj;
      RelativeLayout layoutOuter = (RelativeLayout) v.findViewById(R.id.text_message);
      RelativeLayout layoutInner = (RelativeLayout) v.findViewById(R.id.chat_message_inner);
      layoutInner.setBackgroundResource(msgObj.left ? R.drawable.bubble_a1 : R.drawable.bubble_b1);
      TextView chatText = (TextView) v.findViewById(R.id.text_message_text);
      chatText.setText(msgObj.message);
      TextView chatTime = (TextView) v.findViewById(R.id.chat_timeStamp);
      chatTime.setText(new SimpleDateFormat("HH:mm", Locale.GERMANY).format(msgObj.time));
      //here I am doing some irrelevant stuff concerning the message status
      }
    }else
      //I also have some other types of messages, not being relevant here
    return v;
  }

1 个答案:

答案 0 :(得分:0)

如果您希望消息保持在某一行内,请尝试使用“线性布局”。我不确定它是否会完成您需要的所有操作,因为我不知道您的应用程序的所有要求,但它可能是一个好的开始。

Linear Layout and weight in Android有一些很好的建议以及http://developer.android.com/guide/topics/ui/layout/linear.html

上的官方Android文档 祝你好运。