2014-09-25 31 views
0

我有一个适当的列表视图,它有一个扩展BaseAdapter的适配器。 一切工作正常,但我需要索引0 30 dp的余量。如何实现这一目标?如何为listView的索引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,因为子视图可​​能不总是相同的视图,它将是动态的。

+0

你意味着第一排30DP保证金转换可视性? – 2014-09-25 04:01:25

+0

只适用于第一排。如果它是为每一行,我可以从布局xml中只做对吗?但在这里,我只需要第一排。此外,我无法给列表保证金,因为当我滚动然后部分将被剪辑。 – 2014-09-25 04:03:04

回答

2

简单的替代方法是使用 SpaceView在xml中具有30dp宽度(空间视图是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; 
    } 
+0

感谢您的代码。但我上面提到的基本代码是崩溃 – 2014-09-25 04:15:30

+0

更新的答案它会帮助你肯定 – 2014-09-25 04:16:53

+0

看起来像一个好主意,但空间需要api级别14. mine是8 – 2014-09-25 04:20:45

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) 
    .... 
} 
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; 
}