【问题标题】:Set gravity programmatically for item in RecycerView Android以编程方式为 RecyclerView Android 中的项目设置重力
【发布时间】:2015-04-03 04:15:25
【问题描述】:

我正在使用 RecyclerView Android 与左/右消息框进行聊天。我想将重力设置为 RecyclerView 的项目。通常,我将 itemView 转换为 LinearLayout,然后为其设置 ParamLayout 重力。但是如果是RecyclerView,投到LinearLayout好像不太对劲。它将返回 RecyclerView.LayoutParams。因为:

RecyclerView 的子类的LayoutParams 子类。自定义布局 鼓励管理人员创建自己的子类 LayoutParams 类来存储任何额外需要的每个子视图 有关布局的元数据。

而且我找不到使用 RecyclerView.LayoutParams 设置重力的方法:| 无论如何,任何人都可以在 RecyclerView 中找到重力项目的方法吗?请建议我。

-----------后解决方案------
//1. RecyclerView 的子节点

      <LinearLayout
android:id="@+id/id_grandparent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:divider="@android:color/transparent"
android:gravity="left"
android:orientation="vertical">
<LinearLayout
    android:id="@+id/id_llparent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_customer_feedback_left"
    android:gravity="left"
    android:orientation="vertical">
</LinearLayout>

//2. OnBindView()

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params = setLayoutParamsForParent(params, item.isPosition());
        holder.llParentLayout.setLayoutParams(params); //corresponding to id_llparent ID

//3.

     private LinearLayout.LayoutParams setLayoutParamsForParent(LinearLayout.LayoutParams params, boolean position) {
        params.gravity = position ? Gravity.RIGHT : Gravity.LEFT;
         return params;
    }

【问题讨论】:

    标签: android android-recyclerview gravity


    【解决方案1】:

    问题解决了。 简单地说,我使用

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    

    而不是

    RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) holder.llGrandParent.getLayoutParams();
    

    然后正常为 LinearLayout Params 设置重力。

    【讨论】:

    • 你能展示这部分代码吗?因为我已经尝试过 LinearLayout 和 RelativeLayout 作为 RecyclerView 的孩子,你的代码对我不起作用。或者你可以回答我的问题吗?我真的被困在这里:stackoverflow.com/questions/31101577/…
    • 感谢 Pham,我会尽力让您知道它是否适合我。
    【解决方案2】:

    我通过在项目布局内的视图上设置重力来做到这一点。

    LinearLayout.LayoutParams paramsMsg = new LinearLayout.
                LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        if (position%2 == 0){
            holder.bodyView.setBackgroundResource(R.drawable.outgoing_messages);
            paramsMsg.gravity = Gravity.END;
        } else {
            holder.bodyView.setBackgroundResource(R.drawable.incoming_messages);
            holder.bodyView.setTextColor(0xf08888);
            paramsMsg.gravity = Gravity.START;
        }
        holder.bodyView.setLayoutParams(paramsMsg);
    

    bodyView是item的Layout里面的TextView,item的宽度是“match_parent”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多