我正在制作聊天应用。我想把时间戳放在聊天泡泡旁边。消息将左对齐(已接收)和右(已发送)。
所以,我正在寻找一种方法将toLeftOf
更改为toRightOf
。现在,它看起来像这样:
这是我的每条消息的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>
我在Google上搜索并发现了这一点,但无效:
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);
任何解决方案?感谢
答案 0 :(得分:11)
尝试从任意视图中删除 toRightOf 和 toLeftOf 属性。我将从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);
答案 1 :(得分:2)
<强>重写强>
从当前TextView中删除属性layout_toRightOf
,然后创建两个不同的LayoutParams:一个用于toRightOf
,另一个用于toLeftOf
。您可以根据需要切换参数。
另一种方法是使用具有两种布局的自定义适配器。这种方法应该更快,因为您不是在运行时重新排列布局,而是在视图回收器中维护两个单独的“Reply”和“Send”布局列表。
(注意,API 17引入了removeRule()
,但这还没有帮助。)
答案 2 :(得分:0)
请在下面的代码中使用。
RelativeLayout wrapper = (RelativeLayout) findViewById(R.id.wrapper);
if(isReceivedMessage){
wrapper.setGravity(Gravity.RIGHT);
}
else{
wrapper.setGravity(Gravity.LEFT);
}