У меня была такая же проблема, и, наконец, она заработала.Вот минимальный пример:
Основной макет активности с HorizontalScrollView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
Макет элементов, которые будут раздуты и помещены в представление прокрутки:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="your text" />
</LinearLayout>
И это пример кода для раздувания и добавления элементов:
LinearLayout container = (LinearLayout) findViewById(R.id.container);
LayoutParams elementLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);
int elementCount = 3; // ...or however many you like
for (int i = 0; i < elementCount; i++) {
LinearLayout element = (LinearLayout) getLayoutInflater().inflate(R.layout.element, null);
container.addView(element, elementLayoutParams);
}
В основном он основан на методе расширения содержимого ScrollViews, объясненной в этой статье Ромена Гая.
Однако в этом случае, когда вы добавляете содержимое динамически, другой ключевой момент - установка положительного значения для веса (1f в этом примере) с использованием LayoutParams при добавлении элементов в контейнер.Если у вас есть статический набор элементов, который вы можете включить непосредственно в контейнер, и вам не нужно его раздувать, вы можете указать вес внешнего LinearLayout элементов в XML-макете следующим образом:
android:layout_weight="1"
Но если вы сделаете это динамически, это не сработает, потому что вес сбрасывается до 0 и элементы разрушаются.Следовательно, вам нужно установить его через LayoutParams.