如何动态地将layout_gravity设置为android中的cardview

时间:2017-02-03 13:41:57

标签: android cardview layout-gravity

我正在尝试在我的应用中创建一个类似聊天的功能,而我正在使用cardview聊天文本。我希望将cardview与屏幕右侧对齐,以便发送消息。但是当我将引力属性设置为cardview的父级时,它适用于所有其他属性,但是cardview不会让步。 Plz告诉我如何将layout_gravity设置为cardview(动态方法将被appriciated)。感谢名单。

这是我的model_msg.xml文件,发送的msgs的设置在适配器类中完成:

import re
output = re.findall('[^\w] ([A-Z]+\\n\\n.+\\n)', text)
print output

3 个答案:

答案 0 :(得分:1)

将名片视图包装在LinearLayout中。然后使用LinearLayout上的setGravity(Gravitygravity)设置线性布局的重力,如下所示。请注意,我正在使用RecyclerView重复消息。

message_row_item.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/message_view">

        <android.support.v7.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/message_text_view" />
        </android.support.v7.widget.CardView>
    </LinearLayout>

UI逻辑:

    LinearLayout viewMessage = itemView.findViewById(R.id.message_view);

    if (messageList.get(position).getPeerId() == USER_PEER_ID) {
        viewMessage.setGravity(LEFT);
    } else {
        viewMessage.setGravity(RIGHT);
    }

注意:

我尝试按照其他答案的指示访问cardview上的CardView的LayoutParams和setForegroundGravity,但是没有运气,所以我实现了它,如上所示。

答案 1 :(得分:0)

尝试这种方式:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
yourCardViewHere.setLayoutParams(params);

答案 2 :(得分:0)

我在这里得到了正确答案:https://stackoverflow.com/a/35241091/4836759

无论如何,Thanx。

   RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);

layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
cardView.setLayoutParams(layoutParams);