Центральные элементы HorizontalScrollView, когда этого недостаточно, чтобы прокрутить

У меня есть макет с HorizontalScrollView содержащий LinearLayout для меню, где содержимое раздувается с содержимым БД. Это прекрасно работает, однако, когда не хватает элементов для прокрутки HSV это не заполняет ширину экрана, который идеально должен быть центрирован. Т.е. в настоящее время:

 | Element 1 Element 2 | <- edge of screen 

Вместо:

 | Element 1 Element 2 | <- edge of screen 

В то время как все еще может:

 | Element 1 Element 2 Element 3 Element 4 Elem| <- edge of screen now scrolling 

Формат XML:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainLinearLayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/header" android:layout_width="fill_parent" android:layout_height="25dp" > </TextView> <ScrollView android:id="@+id/scroll1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > <LinearLayout android:id="@+id/contentLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> </ScrollView> <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="fill_parent" android:layout_height="30dp"> <LinearLayout android:id="@+id/footerLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > </LinearLayout> </HorizontalScrollView> </LinearLayout> 

При следующем раздувании XML внутри footerLayout:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/footer_content" android:textSize="18sp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingRight="5dp" android:text="FOOTER" android:singleLine="true" /> 

Любая помощь будет принята с благодарностью.

Я просто решил эту проблему. Я столкнулся с ним несколько часов назад. Вам нужно центрировать HorizontalScrollView в своем родителе и установить его ширину / высоту в wrap_content. Макет, который вы помещаете в HSV, должен иметь свою ширину / высоту, чтобы также обернуть содержимое. Важная часть здесь заключается в том, чтобы не устанавливать гравитацию / layout_gravity на этом макете, или вы можете испытывать (очень раздражающие) проблемы отсечения после раздувания ваших взглядов. Пример ниже содержится в RelativeLayout.

  <HorizontalScrollView android:id="@+id/svExample" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@id/rlExample"> <LinearLayout android:id="@+id/llExample" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> </HorizontalScrollView > 

Удалось обойти центрально-горизонтальную обрезку левой стороны:

Изменена часть макета HorizontalScrollView:

 <LinearLayout android:id="@+id/footerWrapperLayoutToGetAroundCenteringIssue" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="50dp" android:gravity="center_horizontal"> <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_height="fill_parent" android:layout_width="wrap_content"> <LinearLayout android:id="@+id/footerLayout" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> </LinearLayout> </HorizontalScrollView> </LinearLayout> 

Очень жаль, когда он центрирует их, они распределяются неравномерно.

Если у кого-нибудь есть идеи, пожалуйста, дайте мне знать.

У меня была такая же проблема и, наконец, она работала. Вот минимальный пример:

Основной вид работы с 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.

Присвойте wieght 1 текстовому виду в увеличенном виде и сделайте ширину wrapcontent

Ниже простейший способ работал для меня.

 <HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <LinearLayout android:id="@+id/layout_others" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </HorizontalScrollView> 
Intereting Posts
Как добавить пользовательские заголовки HTTP в пользовательские вкладки Chrome? Почему допустимый объект недействителен при получении активности? Как показать список значков с текстом в меню действий Android, как изображение Обнаружение при отсоединении USB-устройства на Android ContentObserver onChange Как обрабатывать изменения с оверлея удаленных томов MediaSession? Наложение наложения Android поверх всех окон, которые получают штрихи Программная прокрутка слова в виде в текстовом виде Пользовательская андроидная пусковая установка возвращается к панели запуска по умолчанию при нажатии кнопки возврата Какова цель андроида, чтобы показать настройки локализации? Не удается отладить I / DEBUG (187): сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), ошибка addr 00000004 Что означает pivotX и значение в анимации Android? Android google maps can not zoom с активным компасом Руководства по дизайну интерфейса для Android-планшетов Android + Admob: Ошибка: типы строк не разрешены (в 'configChanges' со значением (и т. Д.)