【问题标题】:align on the right the entry in a listview在右侧对齐列表视图中的条目
【发布时间】:2012-05-12 22:26:20
【问题描述】:

我有一个列表视图来显示聊天中的消息。我想在左侧显示收到的消息,在右侧显示已发送的消息。 请考虑对齐包含的视图是不够的,因为我需要显示条目的背景,并且背景也应该对齐。所以整个条目应该对齐。

有办法吗?

我尝试使用android:layout_gravity="right",但没有成功。

【问题讨论】:

    标签: android listview alignment


    【解决方案1】:

    当然! 你需要一个适配器。在适配器中,当您为 ListItem 充气时,只需为发送和接收的消息充气不同的 Item!

    【讨论】:

    • 好的,这是唯一的方法吗?我不想使用它,因为我在条目中有几个视图,我不想复制所有视图:一个用于左侧,一个用于右侧
    • 那我不明白这个问题。您不必复制它们。您必须创建 2 个 xml (ListItems),一个用于接收的消息,右对齐,一个用于发送的消息,左对齐。当一个新项目被插入到列表中时,适配器会膨胀一个或另一个项目并设置文本!
    【解决方案2】:

    您可以尝试使用LayoutParams 在适配器中以编程方式设置参数。

    已发送消息类似于以下内容:

    LinearLayout ll = (LinearLayout) findViewById(R.id.MyLinearLayout);
    // need to cast to LinearLayout.LayoutParams to access the gravity field
    LayoutParams params = (LayoutParams)ll.getLayoutParams(); 
    params.gravity = Gravity.RIGHT;
    ll.setLayoutParams(params);
    

    对于收到的消息,反之(将 RIGHT 更改为 LEFT)。

    【讨论】:

    • 补充一点很重要,您应该在主布局中设置框架布局的重力。我用了一个稍微不同的方法
    • 很高兴我能指出你正确的方向。感谢您发布最终解决方案,很高兴知道。
    【解决方案3】:

    我设法做到了:

        LayoutParams params = (LayoutParams) frame.getLayoutParams();
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, alignRight?0:1);
        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT,  alignRight?1:0);
        frame.setLayoutParams(params);
    

    重要的是我必须在 RelativeLayout 中为我的条目添加一个框架,因为 params.addRule 仅适用于 RelativeLayout。如果您尝试对传递给 bindView 的视图执行相同操作,则会得到一个不支持 addRule 的不同 LayoutParam

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多