Нет силы тяжести для scrollview. как сделать контент внутри scrollview как центра
Я хочу, чтобы содержимое внутри scrollView как центра.
<ScrollView
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay"
android:layout_gravity="center" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check"
android:gravity="center_vertical|center_horizontal"/>
</ScrollView>
Примечание: нет атрибута android:gravity
для прокрутки.
любое сол: -
Ответы
Ответ 1
У меня была такая же проблема и, наконец, разобрался. Это для вертикали ScrollView
.
Поместите свой ScrollView
внутрь RelativeLayout
и центрируйте его в RelativeLayout
. Чтобы это работало, ваш ScrollView
должен иметь
android:layout_height="wrap_content"
Вот как выглядит последний код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b1"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b2"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b3"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
Ответ 2
Как насчет этого?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check"
android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
Ответ 3
Я думаю, что более элегантным решением было бы использовать свойство ScrollView
android:fillViewport
. A ScrollView
немного отличается от того, как он обрабатывает это представление содержимого (может иметь только один), даже если вы установите match_parent
(fill_parent
) на ScrollView
, это не даст такого большого расстояния к нему. вместо этого поведение по умолчанию для ScrollView
заключается в том, чтобы обернуть содержимое независимо от того, что вы указали для этого представления. То, что android:fillViewport
делает, сообщает ScrollView
растянуть его содержимое, чтобы заполнить область просмотра (http://developer.android.com/reference/android/widget/ScrollView.html#attr_android:fillViewport). Таким образом, в этом случае ваш LinearLayout
будет растянут, чтобы соответствовать окну просмотра, и если высота будет отставать от области просмотра, тогда она будет прокручиваться, что именно то, что вы хотите!
Принятый ответ не будет работать должным образом, когда контент будет выходить за пределы ScrollView
, потому что он по-прежнему будет централизовать просмотр содержимого, в результате чего он отключит часть представления, а ScrollView
с центром в другом макете работает но просто не чувствую себя хорошо, кроме того, я думаю, что это также приведет к ошибке lint (бесполезный родитель или что-то в этом роде).
Попробуйте что-то вроде этого:
<ScrollView
android:id="@+id/scroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay"
android:fillViewport="true">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check" />
</LinearLayout>
</ScrollView>
Просто помните, что причина, по которой здесь сейчас сосредоточена, связана с android:gravity
на LinearLayout
, так как ScrollView
растягивает LinearLayout
, поэтому помните об этом в зависимости от того, что вы добавляете в макет.
Еще один хороший текст на ScrollView
, но не о центрировании, а о fillViewport
- http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/
Ответ 4
Для @Patrick_Boss - что мешало вырезать контент в моем приложении, это изменить гравитацию и layout_gravity на center_horizontal для LinearLayout.
Это сработало для меня... но не уверен, сработает ли это для вас.
Модификация ответа @Ghost -
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="12dp"
android:paddingBottom="20dp"
android:scrollbarStyle="outsideOverlay" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="check"
android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
Ответ 5
Используйте этот атрибут в ScrollView
android:fillViewport="true"
пример
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideOverlay"
android:fillViewport="true"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--Your Code goes here-->
</RelativeLayout>
</ScrollView>
Убедитесь, что вы используете Single Child в ScrollView, как в примере выше, который является Relativelayout.
Ответ 6
Одна вещь, чтобы рассмотреть то, что НЕ установить. Убедитесь, что ваши дочерние элементы управления, особенно элементы управления EditText
, не имеют свойства RequestFocus
.
Это может быть одним из последних интерпретируемых свойств макета, и он будет переопределять параметры гравитации для своих родителей (layout
или ScrollView
).