我有一个正确的列表视图,其中有一个扩展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,因为子视图可能并不总是相同的视图,它将是动态的。
答案 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;
}