我正在进行泡泡聊天。我使用两个布局的适配器,一个用于传入消息,另一个用于我的消息。适配器运行良好。我的问题是传入的布局,不能很好地显示传入的时间文本。当消息文本增长时,填充屏幕的整个宽度,并隐藏消息时间的文本。
第一个问题:如何实现这一目标?
这是传入的消息布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:animateLayoutChanges="true"
android:gravity="left">
<TextView
android:id="@+id/message_text_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5sp"
android:background="@drawable/speech_bubble_orange"
android:shadowColor="@color/textShadow"
android:shadowDx="1"
android:shadowDy="1"
android:text="Medium Text"
android:textColor="@color/textColor"
android:textSize="20sp" />
<RelativeLayout
android:id="@+id/message_server"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="left"
android:layout_gravity="left" >
<TextView
android:id="@+id/sended_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="9dp"
android:layout_marginTop="10sp"
android:text="Enviado"
android:textSize="10sp"
android:visibility="gone" />
<TextView
android:id="@+id/time_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="18dp"
android:layout_marginTop="23dp"
android:text="23:48"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>
第二个问题 我的消息的布局是相同的,但改变了元素的位置,并且运行良好。为什么呢?
这是问题的图像:
Image http://oi58.tinypic.com/11tsaas.jpg
修改
我需要橙子气泡与绿色相同的行为,当我在气泡中只有一个单词时,以及当气泡充满单词时的相同行为(见绿色气泡)
答案 0 :(得分:4)
在两个气泡布局中设置layout_weight
属性(在android:layout_weight="1"
message_text_server
对象上设置TextView
),告诉父容器如何将可用空间分配给其子容器
结果(除了我剥离的样式)你会得到你想要的东西:
请参阅the docs或查看热门答案in this question,详细了解layout_weight
并使用它。
修改强>
您必须做错事,因为将父容器和服务器文本和日期textview字段宽度设置为match_parent
,服务器文本layout_width
应该足以为这两个错误设置。
编辑2
您(ab)在布局中使用边距和填充。
我需要橙子气泡具有与之相同的行为 绿色的,当我在泡沫中只有一个词和相同的行为 当泡沫充满了文字时(见绿色泡泡)
您只需要使用layout_width
TextView的layout_gravity
和server_text
。这里正确的布局拍摄:
然后是它背后的布局。无需填充/边距。只需gravity
并播放宽度height
和width
加weight
。只需按照您的要求设置样式,然后就回家了:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:animateLayoutChanges="true"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left">
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5sp"
android:layout_weight="1"
android:text="Foo bar foo foo foo"
android:textSize="20sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:text="Enviado"
android:textSize="10sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:text="23:48"
android:textSize="10sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Enviado"
android:textSize="10sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="23:48"
android:textSize="10sp" />
</LinearLayout>
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5sp"
android:layout_weight="1"
android:text="Foo bar foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left">
<TextView
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5sp"
android:layout_weight="1"
android:text="Foo bar foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo"
android:textSize="20sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:text="Enviado"
android:textSize="10sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:text="23:48"
android:textSize="10sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="Enviado"
android:textSize="10sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="23:48"
android:textSize="10sp" />
</LinearLayout>
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5sp"
android:layout_weight="1"
android:text="Foo bar foo foo"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
基本上不需要填充/边距。
答案 1 :(得分:1)
添加
android:layout_weight="1"
到TextView
(带有布雷的那个)。这样,它应该占用RelativeLayout
所需的所有空间。
编辑:
根布局的高度应为wrap_content
,您还需要为内部RelativeLayout的子项指定位置:
android:layout_below="@id/sended_server"
和android:layout_alignWithParentIfMissing="true"
与身份TextView
的{{1}}应该可以解决问题
答案 2 :(得分:0)
使用RlativeLayout
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:animateLayoutChanges="true" >
<RelativeLayout
android:id="@+id/message_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_gravity="left"
android:gravity="left" >
<TextView
android:id="@+id/sended_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="9dp"
android:layout_marginTop="10sp"
android:text="Enviado"
android:textSize="10sp"
android:visibility="gone" />
<TextView
android:id="@+id/time_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="18dp"
android:layout_marginTop="23dp"
android:text="23:48"
android:textSize="10sp"
android:background="@drawable/speech_bubble_orange"
android:shadowColor="@color/textShadow"
android:textColor="@color/textColor />
</RelativeLayout>
<TextView
android:id="@+id/message_text_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_margin="5sp"
android:layout_toLeftOf="@id/message_server"
android:shadowDx="1"
android:shadowDy="1"
android:text="Medium Text"
android:textSize="20sp" />
</RelativeLayout>
答案 3 :(得分:-1)
首先尝试这个,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:animateLayoutChanges="true"
android:gravity="left"
android:orientation="horizontal" >
<TextView
android:id="@+id/message_text_server"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5sp"
android:layout_weight="1"
android:background="@android:color/holo_orange_light"
android:shadowColor="@android:color/darker_gray"
android:shadowDx="1"
android:shadowDy="1"
android:text="Medium Text"
android:textColor="@android:color/white"
android:textSize="20sp" />
<RelativeLayout
android:id="@+id/message_server"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="left"
android:gravity="left" >
<TextView
android:id="@+id/sended_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="9dp"
android:layout_marginTop="10sp"
android:text="Enviado"
android:textSize="10sp"
android:visibility="visible" />
<TextView
android:id="@+id/time_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="18dp"
android:layout_marginTop="23dp"
android:text="23:48"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>
第二,
如果您更改属性位置,就好像先将textview放在第一位并将textview文本放在第二位,那么textview会根据需要获取空间,然后将剩余空间提供给第二个textview,因此在更改属性位置时它的工作正常