没有重力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> 

注意: scrollvew没有android:gravity属性。

任何溶胶: –

这个怎么样?

 <?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> 

我有同样的问题,并最终弄清楚了。 这是一个垂直的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> 

我认为更优雅的解决scheme是使用ScrollViewandroid:fillViewport属性。 一个ScrollView与它的内容视图(只能有一个)有所不同,即使你设置了match_parentfill_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> 

请记住,现在在这里居中的原因是由于LinearLayout上的android:gravity ,因为ScrollView将拉伸LinearLayout因此要记住添加到布局的内容。

另一个好的阅读ScrollView虽然不是关于居中,但关于fillViewporthttp://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/

@Ghost我会留下这个在评论中…但我是新来的stackoverflow和没有足够的代表点评论。

对于@Patrick_Boss,在我的应用程序中停止剪切的内容是将LinearLayout的gravity和layout_gravity更改为center_horizo​​ntal。

它为我工作…但不知道它是否会为你工作。

@ 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> 

有一件事要考虑的是不要设置。 确保你的子控件,特别是EditText控件,没有设置RequestFocus属性。 这可能是布局中最后一个解释的属性之一,它将覆盖其父项(布局或滚动视图)上的重力设置。