如何为listView的索引0设置边距

时间:2014-09-25 04:00:27

标签: android

我有一个正确的列表视图,其中有一个扩展BaseAdapter的适配器。 一切正常,但我需要30 dp的保证金指数0.如何实现这一目标?

我尝试了以下2个代码,但它崩溃了。

View subView = createButtonView((MenuButton) getItem(position));
        if(position==0){
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)subView.getLayoutParams();
            layoutParams.setMargins(30, 0, 0, 0);
            subView.setLayoutParams(layoutParams);
        }
        return subView;





public View getSubView(int position){
        View subView = createButtonView((MenuButton) getItem(position));
        if(position==0){
            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
            subView.setLayoutParams(layoutParams);
        }
        return subView;
    }

此外,我无法使用headerView,因为子视图可​​能并不总是相同的视图,它将是动态的。

3 个答案:

答案 0 :(得分:2)

简单的替代方案是使用 在xml中具有30dp宽度的SpaceView(空间视图在android中是非常轻的视图) 并调整职位的可见性

if (position == 0)
            yourxmlSpaceView.setVisibility(View.VISIBLE);
        else
            yourxmlSpaceView.setVisibility(View.GONE);

对于30dp,您可以使用此方法将int转换为像素

public int dpToPx(int dp) {
        DisplayMetrics displayMetrics = context.getResources()
                .getDisplayMetrics();
        int px = Math.round(dp
                * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
        return px;
    }

答案 1 :(得分:0)

您的列表视图可以添加视图到假空间,高度为30dp。

查看:

<View
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:id="@+id/fake_view"
/>

适配器:

public View getView(int position, View v, ViewGroup parent){
     ....
     View fakeView = v.findViewById(R.id.fake_view);
     fakeView.setVisibility(position == 1? View.VISIBLE : View.GONE)
     ....
}

答案 2 :(得分:0)

在适配器类中检查位置零并在if子句中指定布局参数并将其添加到convertView

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) mcontext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.adapter_main, convertView, false);
    }
    if(position == 0){

        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)subView.getLayoutParams();
        layoutParams.setMargins(30, 0, 0, 0);
        convertView.setLayoutParams(layoutParams);
      }

    return view;
}