画廊的每个元素都包含在一个LinearLayout
只需使用另一个包装它并在内部LinearLayout
设置边距。我已经检查过了,它似乎做了你想要的。LinerLayout.LayoutParams
LinearLayout
所以你为画廊项目膨胀的布局应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layOuter"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/layInner"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView android:id="@+id/imageView1" android:src="@drawable/icon"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:scaleType="fitXY" />
<TextView android:text="TextView" android:id="@+id/textView"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:visibility="visible" />
</LinearLayout>
</LinearLayout>
然后您可以在适配器getView
方法中访问内部 LinearLayout 并根据您的条件在那里设置边距(示例代码没有 convertView 重用优化):
public View getView(int position, View convertView, ViewGroup parent) {
Context context = getContext();
final float density = context.getResources().getDisplayMetrics().density;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layOuter = inflater.inflate(R.layout.row_layout, null);
View layInner = layOuter.findViewById(R.id.layInner);
if (...) { // your condition
LinearLayout.LayoutParams innerLP = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
innerLP.leftMargin = (int) (50 * density);
layInner.setLayoutParams(innerLP);
}
return layOuter;
}
请注意,您必须使用LinearLayout.LayoutParams
(it extends MarginLayoutParams
) 进行内部布局,否则将无法正常工作。