我正在尝试构建一个像Facebook messenger for android一样的聊天单元格布局。我能够轻松复制这种布局。我为名称添加了一个maxLine参数,以防它真的很长,如果是这样的话会显示省略号。问题是如果这个人的名字真的很长,那么Ellipsis就不会出现,我的时间戳将是2个字符长,2个字符TextView that shows the timestamp。我也在使用CirceImageView库。
Build.graddle
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1'
compile 'de.hdodenhof:circleimageview:1.3.0'
}
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="72dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/profile_image"
android:layout_width="56dp"
android:layout_height="56dp"
android:src="@drawable/bob"
android:layout_marginRight="16dp"
app:border_width="0dp"
app:border_color="#FF000000"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toStartOf="@id/lblMessageTime"
android:text="Person name is lonnnnnnnnnnnnnng"
android:id="@+id/person_name"
android:textSize="15sp"
android:textColor="#000000"
android:layout_toLeftOf="@id/textTime"
android:textStyle="bold"
android:ellipsize="end"
android:maxLines="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:text="23:00"
android:layout_weight="1"
android:layout_alignParentRight="true"
android:layout_alignBaseline="@id/person_name"
android:id="@+id/lblMessageTime"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/grayAddSessionButton"
android:id="@+id/textMessage"
android:text="This is a message"/>
</LinearLayout>
</LinearLayout>
感谢您的帮助!
答案 0 :(得分:1)
如果您想避免过度使用,则不应将RelativeLayout
用作TextViews
的容器,或者不要将wrap_content
用于android:layout_width
person_name
{{ 1}}但是要使它固定宽度(即&#34; 200dp&#34;)或扩展TextView
类,并使其不允许超出一定宽度的任何拉伸。
答案 1 :(得分:-1)
我找到了一种方便的方法。我删除了android:layout_weight =&#34; 1&#34;到了时间戳,我添加了android:layout_weight =&#34; .5&#34;到名称TextView。由于名称TextView是唯一具有权重并且低于1的名称,因此如果文本视图与时间戳(see image)重叠,则不会完全显示包含该名称的文本视图。
这是新代码:
<强> Layout.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="72dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/profile_image"
android:layout_width="56dp"
android:layout_height="56dp"
android:src="@drawable/bob"
android:layout_marginRight="16dp"
app:border_width="0dp"
app:border_color="#FF000000"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="This name is really long but it is cut"
android:id="@+id/person_name"
android:textSize="15sp"
android:textColor="#000000"
android:layout_toLeftOf="@id/textTime"
android:textStyle="bold"
android:ellipsize="end"
android:layout_weight=".5"
android:maxLines="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:text="23:00"
android:layout_alignParentRight="true"
android:id="@+id/lblMessageTime"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/grayAddSessionButton"
android:id="@+id/textMessage"
android:text="This is a message"/>
</LinearLayout>
</LinearLayout>