8

我正在制作聊天应用程序。我想把时间戳放在聊天气泡旁边。消息将左对齐(用于接收)和右对齐(用于发送)。

所以,我正在寻找一种方法来更改toLeftOftoRightOf. 现在,它看起来像这样:

时间戳错误对齐

这是我的每条消息的 XML 代码(我有ArrayAdapter这个处理)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/wrapper"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/bubble"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#ffffff" />

        <TextView
            android:id="@+id/timeStamp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/bubble" />

</RelativeLayout>

我四处搜索并找到了这个,但不起作用:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
if(isReceivedMessage){
    params.addRule(RelativeLayout.RIGHT_OF, R.id.bubble);
}
else{
    params.addRule(RelativeLayout.LEFT_OF, R.id.bubble);
}
timeStampTextView.setLayoutParams(params);

有什么解决办法吗?谢谢

4

3 回答 3

11

试试这个从任何视图中删除toRightOftoLeftOf属性。我正在从 textview 中删除这些属性。

    TextView header2=(TextView) findViewById(R.id.text_view_header_shoppinglist);
        RelativeLayout.LayoutParams mLayoutParams2=(RelativeLayout.LayoutParams)header2.getLayoutParams();
        mLayoutParams2.addRule(RelativeLayout.LEFT_OF,0);
        mLayoutParams2.addRule(RelativeLayout.RIGHT_OF,0);
于 2013-03-26T06:41:52.387 回答
2

Rewrite从当前 TextView 中
移除该属性,然后创建两个不同的 LayoutParams:一个 for和一个 for 。您可以根据需要切换参数。layout_toRightOftoRightOftoLeftOf

另一种方法是使用具有两种布局的自定义适配器。这种方法应该更快,因为您不是在运行时重新安排布局,而是在视图回收器中维护两个单独的“回复”和“发送”布局列表。

(请注意,API 17 已经引入removeRule(),但这还没有帮助。)

于 2012-11-21T07:13:58.850 回答
0

请使用以下代码。

RelativeLayout wrapper = (RelativeLayout) findViewById(R.id.wrapper);
if(isReceivedMessage){
    wrapper.setGravity(Gravity.RIGHT);
}
else{
    wrapper.setGravity(Gravity.LEFT);
}
于 2012-11-21T07:14:33.030 回答