2013-10-23 136 views
13

我想将我的LinearLayout放置在ScrollView中。当LinearLayout的高度很小时,它居中居中(见图#1),但是当LinearLayout的高度大于屏幕的高度时,它表现得很奇怪。我无法看到LinearLayout的顶部(请参阅图像#2),并且在ScrollView的底部有巨大的填充。我不知道这里发生了什么。当LinearLayout中有大量内容时,整个屏幕应该如图3所示。滚动视图中的中心内容

image #1
image #2
image #3

这是我的布局文件:

  <?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:background="#cccfff" > 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical" 
        android:layout_margin="28dp" 
        android:background="#ffffff" 
        android:orientation="vertical" 
        android:paddingBottom="40dp" 
        android:paddingLeft="20dp" 
        android:paddingRight="20dp" 
        android:paddingTop="40dp" > 

        <ImageView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="16dp" 
         android:src="@drawable/ic_launcher" /> 

        <TextView 
         android:id="@+id/tip_title" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="12dp" 
         android:text="Title" 
         android:textColor="@color/orange_text" 
         android:textSize="@dimen/font_size_medium" /> 

        <TextView 
         android:id="@+id/tip_description" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Description description..." 
         android:textSize="@dimen/font_size_small" /> 
       </LinearLayout> 

      </ScrollView> 
+0

集'layout_gravity = center'用于为*的意见集中* –

+0

先生,你应该为“按节奏,推节奏,推节奏,推节奏”的给予好评 –

回答

21

您应该使用外部水平的LinearLayout

+0

适用于Android 3.0,适用于所有其他verisones? –

-1

尝试把利润率和补白的ScrollView

+0

这没有帮助。首先我的ScrollView不能有边距。它必须采取整个屏幕。它也不能有填充,因为这些填充也适用于右侧的ScrollView的滚动条,滚动条应该能够从屏幕的顶部滚动到底部。 – Egis

0

试试这个可满足您的要求。在Java代码中

<?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" 
    android:background="#cccfff" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="10dp" 
     android:background="#ffffff" 
     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:paddingBottom="40dp" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" 
     android:paddingTop="40dp" > 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="16dp" 
      android:src="@drawable/ic_launcher" /> 

     <TextView 
      android:id="@+id/tip_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="12dp" 
      android:text="Title" /> 

     <TextView 
      android:id="@+id/tip_description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="biruDescription description..." /> 
    </LinearLayout> 

</LinearLayout> 

下一行

TextView tip_description = (TextView) findViewById(R.id.tip_description); 
     tip_description.setMovementMethod(new ScrollingMovementMethod()); 

这将滚动你的描述的内容,而整个布局。要看到

<ImageView 
      android:focusable="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="16dp" 
      android:src="@drawable/ic_launcher" /> 
+0

当tip_description文本短时,LinearLayout不会垂直居中。 – Egis

+0

我编辑帖子请检查 –

+0

这是迄今为止最好的解决方案,但我希望整个LinearLayout可滚动不只是其中的TextView。我一直在Google上搜索一个小时,现在我有一个印象,那就是不可能拥有我想要的东西。哦,好吧...... – Egis

0
<?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" 
      android:orientation="vertical" 
      android:gravity="center" 
      android:padding="10dp" 
      android:background="#cccfff"> 

      <ScrollView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       > 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical" 
        android:layout_margin="28dp" 
        android:background="#ffffff" 
        android:orientation="vertical" 
        android:paddingBottom="40dp" 
        android:paddingLeft="20dp" 
        android:paddingRight="20dp" 
        android:paddingTop="40dp" > 

        <ImageView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="16dp" 
         android:src="@drawable/ic_launcher" /> 

        <TextView 
         android:id="@+id/tip_title" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="12dp" 
         android:text="Title" 
         android:textColor="@color/orange_text" 
         android:textSize="@dimen/font_size_medium" /> 

        <TextView 
         android:id="@+id/tip_description" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Description description..." 
         android:textSize="@dimen/font_size_small" /> 
       </LinearLayout> 

      </ScrollView> 
</LinearLayout> 
+0

不幸的是,它不起作用。 – Egis

2

将焦点设置你的最顶端的UI组件。它在相同的情况下为我工作。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="horizontal" > 
    <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 
     <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" > 
      <TextView 
        android:text="@string/your_text" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 
-1

也许还不清楚布局是如何工作的。在你的情况下,你需要设置一个外部布局来填充父项,并将重力设置为中心,内部有一个布局高度为wrap_content的滚动视图,以及布局高度为wrap_content的内部布局。然后,如果外部布局较小,则它将居中滚动视图。

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"> 

    <ScrollView 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

     <!-- Content here --> 

     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 
21

您可以使用android:fillViewport="true"来居中内容。事情是这样的:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 
     <!-- content --> 
</ScrollView> 
+0

这是一个更好的解决方案。它不涉及在层次结构中创建无用的LinearLayout。 –

+0

短而精美的解决方案...谢谢你... !!! –

+0

非常好!'layout_gravity'以LinearLayout为中心,导致它隐藏工具栏下的内容。这一个工作! – kirtan403