【问题标题】:Android ScrollView not centeringAndroid ScrollView 不居中
【发布时间】:2023-03-19 22:56:01
【问题描述】:

我有以下代码:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">
    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/activity_list_films">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Back"
                android:onClick="back"/>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

但是,按钮以及我动态添加到内部 LinearLayout 的内容都出现在屏幕的左上角。我做错了什么?

我也尝试将 layout_gravity="center"gravity="center" 放入内部 LinearLayout,但这没有帮助。

谢谢。

【问题讨论】:

    标签: android android-linearlayout centering android-scrollview


    【解决方案1】:

    您的 LinearLayout 宽度为 wrap_content :它不占用屏幕的整个宽度,并且不能水平居中内容。所以把它改成android:layout_width="match_parent"也把layout_gravity改成center_horizontalandroid:layout_gravity="center_horizontal"

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">
    
        <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <LinearLayout
                android:id="@+id/activity_list_films"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:onClick="back"
                    android:text="Back" />
            </LinearLayout>
        </ScrollView>
    </LinearLayout>
    

    【讨论】:

      【解决方案2】:

      试试这个

      <ScrollView
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
      
              <LinearLayout
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_gravity = "center"
                  android:gravity="center"
                  android:id="@+id/activity_list_films">
      
                  <Button
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:text="Back"
                      android:onClick="back"/>
              </LinearLayout>
          </ScrollView>
      

      【讨论】:

        【解决方案3】:

        请设置宽度 -> ma​​tch_parent 的 LinearLayout

              <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="match_parent"<!--change this one -->
                    android:layout_height="wrap_content"
                    android:id="@+id/activity_list_films">
        
                 <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Back"
                    android:onClick="back"/>
            </LinearLayout>
        

        否则,您可以将LinesrLayout 设置在中心。它将位于您的ScrollView 的中心。

        <LinearLayout
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/activity_list_films"
                android:gravity="center">
        
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Back"
                    android:onClick="back"/>
            </LinearLayout>
        

        【讨论】:

        • ScrollView 的子级不应该有匹配父级的高度,它违背了整个目的:内容永远不会大于滚动视图并且它不会滚动
        • @JulienArzul 感谢您的建议和更改代码。
        【解决方案4】:
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">
            <ScrollView
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:fillViewport="true"
                android:layout_height="match_parent">
        
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:id="@+id/activity_list_films">
        
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Back"
                        android:onClick="back"/>
                </LinearLayout>
            </ScrollView>
        </LinearLayout>
        

        您缺少 ScrollView 的 fillViewPort

        【讨论】:

          【解决方案5】:

          您无需在Scroll View 中更改Linear Layout 中的Height

          如果您这样做,Scroll View 中的内容将不会滚动。

          您只需要在Linear Layout 中提供android:layout_gravity="center_horizontal",而不是保持相同。

          关注下方Layout

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center">
          
              <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
          
                  <LinearLayout
                      android:id="@+id/activity_list_films"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_gravity="center_horizontal"
                      android:orientation="vertical">
          
                      <Button
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_gravity="center_horizontal"
                          android:onClick="back"
                          android:text="Back" />
                  </LinearLayout>
              </ScrollView>
          </LinearLayout>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-12
            • 2012-12-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多