Каждый элемент Галереи состоит из 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>
Затем вы можете получить доступ к внутреннему LinearLayout в методе адаптера getView
и установить запас в зависимости от ваших условий (пример кода без оптимизации повторного использования 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
(он расширяет MarginLayoutParams
) для внутреннего макета, иначе он не будет работать.