【问题标题】:Change gravity programmatically on ListView item在 ListView 项目上以编程方式更改重力
【发布时间】:2014-03-10 20:36:21
【问题描述】:

我想要一个 ListView,其中一些项目呈现在左侧,一些项目呈现在右侧。我真的不知道如何实现这一点。我正在考虑在我的适配器的getView() 方法返回的View 上调用setGravity(Gravity.RIGHT),但该方法显然只存在于ViewGroup,这让我认为它实际上会改变对象内容的重力。它看起来像这样:

getView(int position, View toReturn, ViewGroup parent) {

    // Holder pattern, *yawn*

    if (needsToBeOnRight) {
        toReturn.setGravity(Gravity.RIGHT)

        // or whatever it is I'm actually supposed to do
    }

    return toReturn;
}

toReturn 所代表的View 应该是RelativeLayout,所以我认为理论上我可以将其转换为一个并尝试上述方法,但如上所述,我怀疑这是否可行。我应该如何进行?

【问题讨论】:

    标签: android android-listview gravity


    【解决方案1】:

    原来我就快到了。为了使它工作,我必须将我想要向右或向左定位的视图包装在 FrameLayout 中。这将使上述代码中的 toReturn 成为 FrameLayout。

    ViewHolder holder = (ViewHolder) toReturn.getTag();
    
    // Get the view's LayoutParams. In this case, since it is wrapped by a FrameLayout,
    // that is the type of LayoutParams necessary.
    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) holder.viewThatMightNeedToBeOnRight.getLayoutParams();
    
    // Set gravity to right or left as necessary within the LayoutParams.
    if (params != null) {
        if (needsToBeOnRight) {
            params.gravity = Gravity.RIGHT;
        } else {
            params.gravity = Gravity.LEFT;
        }
    
        // Assign the newly edited LayoutParams to the view.
        holder.viewThatMightNeedToBeOnRight.setLayoutParams(params);
    }
    

    【讨论】:

      【解决方案2】:
      LayoutParams lay = new LayoutParams(LayoutParams.MATCH_PARENT,
                                          LayoutParams.MATCH_PARENT);
      lay.gravity      = Gravity.END;
      
      mListView.setLayoutParams(lay);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        相关资源
        最近更新 更多