- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用左右显示消息的 ListView 来制作类似聊天的 View 。左侧消息的标记是
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="left">
<TextView
android:id="@+id/MessageListItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:background="@drawable/RoundedCornersBlue"
android:padding="8dp"
android:text="realy long realy long realy long realy long realy long realy long realy long realy long "
android:layout_marginRight="5dp" />
<TextView
android:id="@+id/MessageListItemDate"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#cbc4b1"
android:text="23:11"
android:gravity="center_horizontal|center_vertical" />
</LinearLayout>
但是缺少第二个 TextView (时间戳)。
http://i.stack.imgur.com/JxDXQ.jpg
正确的消息具有以下标记
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="right">
<TextView
android:id="@+id/MessageListItemDate"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#cbc4b1"
android:text="12:34"
android:gravity="center_horizontal|center_vertical" />
<TextView
android:id="@+id/MessageListItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="realy long realy long realy long realy long realy long realy long realy long realy long "
android:background="@drawable/RoundedCornersBlue"
android:padding="8dp"
android:layout_marginLeft="5dp" />
</LinearLayout>
http://i.stack.imgur.com/1MnyW.jpg
这个看起来也是我想要的。左右唯一的区别是 LinearLayout 的 android:gravity 和 LinearLayout 中 textviews 的顺序。
知道我做错了什么吗?或者我怎样才能实现这种类型的设计
谢谢,米海
最佳答案
我最近遇到了完全相同的问题。虽然您刚才寻找答案,但它可能对其他人有用。这是我处理它的方式:
这是我的 conversation_item 的 xml 代码,默认情况下一切都站在左边:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/conversationItemRelativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="11dp"
android:paddingRight="11dp"
>
<ImageView
android:id="@+id/conversationUserImage"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/my_ears_placeholder_grey_background"
android:layout_alignBottom="@+id/conversationBubble"
/>
<TextView
android:id="@+id/conversationDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Time Ago"
android:layout_below="@id/conversationUserImage"
android:layout_marginTop="5dp"
/>
<TextView
android:id="@+id/conversationBubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/conversationUserImage"
android:text="Exemple Text"
android:background="@drawable/bubbleleft"
android:gravity="center"
/>
<ImageView
android:id="@+id/messagePicture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/conversationUserImage"
android:gravity="center"
/>
</RelativeLayout>
然后我没有复制 xml,而是使用我的自定义适配器调用的方法在代码中设置布局更改:
private View getConversationItem(Message message) {
View view = LayoutInflater.from(ConversationActivity.this).inflate(R.layout.conversation_item, null);
...
if (message.iAmOwner()) {
conversationBubble.setBackground(getResources().getDrawable(R.drawable.bubbleleft));
messagePicture.setBackground(getResources().getDrawable(R.drawable.bubbleleft));
ImageLoader.getInstance().displayImage(myPictureURL, conversationUserImage, options);
...
}
else {
ImageLoader.getInstance().displayImage(senderPictureURL, conversationUserImage, options);
conversationBubble.setBackground(getResources().getDrawable(R.drawable.bubbleright));
messagePicture.setBackground(getResources().getDrawable(R.drawable.bubbleright));
RelativeLayout.LayoutParams conversationUserImageParams = (RelativeLayout.LayoutParams) conversationUserImage.getLayoutParams();
conversationUserImageParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
conversationUserImage.setLayoutParams(conversationUserImageParams);
RelativeLayout.LayoutParams conversationDateParams = (RelativeLayout.LayoutParams)conversationDate.getLayoutParams();
conversationDateParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
conversationDate.setLayoutParams(conversationDateParams);
RelativeLayout.LayoutParams conversationBubbleParams = (RelativeLayout.LayoutParams) conversationBubble.getLayoutParams();
conversationBubbleParams.addRule(RelativeLayout.LEFT_OF,R.id.conversationUserImage);
RelativeLayout.LayoutParams messagePictureParams = (RelativeLayout.LayoutParams) messagePicture.getLayoutParams();
messagePictureParams.addRule(RelativeLayout.LEFT_OF,R.id.conversationUserImage);
messagePictureParams.removeRule(RelativeLayout.RIGHT_OF);
conversationBubbleParams.removeRule(RelativeLayout.RIGHT_OF);
conversationBubble.setLayoutParams(conversationBubbleParams);
messagePicture.setLayoutParams(messagePictureParams);
}
return view;
}
希望这对您有所帮助。干杯
关于Android layout chat like listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13155495/
我不确定是否理解好几个 Android /res/layout 文件夹所起的作用。 layout:一般布局 layout-port:必须更改为纵向的小部件布局 layout-land:小部件的布局,必
我在 Qt 4.7 中有一个界面,但我很难按照自己的意愿行事。 所需行为的基本描述:用户在组合框中进行选择,这会导致查询转到另一个函数,该函数返回一个 QHBoxLayout 对象,该对象通常包括多个
我在 res 文件夹中创建了 layout-large、layout-normal 和 layout-xlarge 并且我将所有 xml 文件复制到那些布局文件夹中 首先,我想问一下 layout(d
如图所示。我想在布局上方显示星图。我是这种编码的新手。 我的查询是1)是否可以在我的布局端显示星标(图像)? 2) 如果每次点击我的 Activity 时我都想显示星标并显示第二张图片,这可能吗?意味
关闭。这个问题需要debugging details .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 上个月关闭。 Improve this questio
我正在使用 android studio 中的 Material 设计为 pre lollipop 设备创建一个 android 应用程序,我是 android studio 的新手我正在我的项目中创
我对 Android 布局设计感到困惑。我想实现下图中的布局: 但是下面的代码产生了类似这张图片的东西: 我的代码
如果我有: Some Element.... Other Element
我有一个单元格(称为A),它在更高层次的单元格(称为P)中使用一次。当我将 A 放在 P 中时,它的边框比 A 的实际内容大得多。当我下降到 A 并进行缩放时,它被缩小了,表明边缘存在一些东西。 我可
我有一个“auth-redirect”模块,位于所有页面布局文件(1column、2column 等)的开头。这可以确保在渲染任何页面之前,如果用户未经过正确身份验证,则会重定向到登录页面。 我允许呈
我的app只支持landscape模式(这是业务需求)。 我在 layout-land 文件夹中有一个布局 xml 文件,但我没有费心创建一个 layout 文件夹,因为我在 Android list
我正在尝试为我的 Android 应用程序创建启动屏幕,如链接 http://developer.xamarin.com/guides/android/user_interface/creating_
我目前正在开发一个应用程序,我正在使用 swdp为了创建对多个屏幕的支持。 我添加了 sw400dp文件夹,根据 Android Studio 的 XML 渲染器,它基本上包含所有较小的手机。 这意味
Android 在“layout-normal”和“layout”文件夹中处理布局的方式有什么不同吗?如果我有一个被认为布局很小的设备,如果只有这两个选项,它会查看哪个文件夹? 最佳答案 是的,在您给
我已经看到了在单个页面上创建多个强制布局的解决方案,其中每个布局都包含在其自己的SVG中。但是,我一直无法找到有关如何在单个SVG中包括多个力布局的帮助。每个布局都有自己的数据与之关联。 可以在htt
我听说 Constraint-Layout 中的指南和 RTL 存在一些错误。但是这些方法都没有帮助我。我的BottomNavigation 的两边都有指南,一切都在LTR 中工作,但在RTL 中,其
我有以下渲染函数: render() { return ( Header
我知道如何使用以下文件夹,但例如我不知道 layout-small 和 layout-sw320dp 有什么区别? 此外,建议我哪些文件夹对优化很重要。我不喜欢我的程序被用户视为不规则。我希望得到您的
layout-latest.js ui-layout-west 面板 west: { paneSelector: ".ui-layout-west"
我是 Android 开发的新手,对我来说,了解图形布局和 xml 如何相互关联的一个好方法是尝试 xml 属性并查看图形 UI 中的变化。有没有一种方法可以同时并排查看,而不必从一个切换到另一个?图
我是一名优秀的程序员,十分优秀!