【问题标题】:How to use ScrollView in Android?如何在 Android 中使用 ScrollView?
【发布时间】:2011-10-04 04:45:47
【问题描述】:

我有一个 XML 布局文件,但文本超出了屏幕大小。我需要做什么才能创建ScrollView

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1" >

    <TableRow>
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="10dip"
            android:layout_marginRight="5dip"
            android:tint="#55ff0000"
            android:src="@drawable/icon" />
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Name " />
        <TextView android:id="@+id/name1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Veer" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Age" />

        <TextView android:id="@+id/age1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="23" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/gender"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Gender" />
        <TextView android:id="@+id/gender1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Male" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/profession"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Professsion" />
        <TextView android:id="@+id/profession1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Mobile Developer" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/phone"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Phone" />
        <TextView android:id="@+id/phone1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="03333736767" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Email" />
        <TextView android:id="@+id/email1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="veer.developer@gmail.com" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/hobby"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Hobby" />
        <TextView android:id="@+id/hobby1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Play Games" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/ilike"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  I like" />
        <TextView android:id="@+id/ilike1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Java, Objective-c" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/idislike"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  I dislike" />
        <TextView android:id="@+id/idislike1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Microsoft" />
    </TableRow>
    <TableRow>
        <TextView android:id="@+id/address"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="3dip"
            android:text="  Address" />
        <TextView android:id="@+id/address1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Johar Mor" />
    </TableRow>
</TableLayout>

【问题讨论】:

    标签: android scrollview


    【解决方案1】:

    有两种选择。您可以使整个布局可滚动或仅 TextView 可滚动。

    对于第一种情况,

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
    
            <TableLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:stretchColumns="1" >
    
                <TableRow>
    
                    <ImageView
                        android:id="@+id/imageView"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dip"
                        android:layout_marginRight="5dip"
                        android:layout_marginTop="10dip"
                        android:src="@drawable/icon"
                        android:tint="#55ff0000" >
                    </ImageView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/name"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Name " >
                    </TextView>
    
                    <TextView
                        android:id="@+id/name1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Veer" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/age"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Age" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/age1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="23" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/gender"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Gender" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/gender1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Male" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/profession"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Professsion" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/profession1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Mobile Developer" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/phone"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Phone" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/phone1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="03333736767" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/email"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Email" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/email1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="veer.developer@gmail.com" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/hobby"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Hobby" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/hobby1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Play Games" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/ilike"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  I like" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/ilike1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Java, Objective-c" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/idislike"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  I dislike" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/idislike1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Microsoft" >
                    </TextView>
                </TableRow>
    
                <TableRow>
    
                    <TextView
                        android:id="@+id/address"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="3dip"
                        android:text="  Address" >
                    </TextView>
    
                    <TextView
                        android:id="@+id/address1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:text="Johar Mor" >
                    </TextView>
                </TableRow>
    
                <Relativelayout>
                </Relativelayout>
            </TableLayout>
        </RelativeLayout>
    
    </ScrollView>
    

    或者,正如我所说,您可以单独将 scrollView 用于 TextView。

    【讨论】:

    • 像这样结束滚动视图的位置
    • 对不起,我的错。我现在已经编辑了答案。你必须在最后结束它。
    • 为我工作。我需要在 ScrollView 中扭曲我的 LinearLayout。
    • TextView 类也负责自己的滚动,因此不需要 ScrollView,但是将两者结合使用可以实现更大容器内的文本视图的效果。引用自:developer.android.com/reference/android/widget/ScrollView.html
    【解决方案2】:

    只需将顶层布局设置为 ScrollView:

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:stretchColumns="1">
    
            <!-- everything you already have -->
    
        </TableLayout>
    </ScrollView>
    

    【讨论】:

    • 是否可以在 ScrollView 下给 ScrollView ???或者在同一页面中提供多个滚动视图???
    • @TaritRay - 屏幕上有多个 ScrollViews 当然不是问题;只需安排父布局,以便它们在屏幕上都有空间。至于另一个里面的一个 ScrollView,这很困难。相反,Android 兼容性库有NestedScrollView。网络上有很多关于如何在该应用程序中使用 NestedScrollView 的教程。
    【解决方案3】:

    将您的 TableLayout 放在 ScrollView 布局中。这将解决您的问题。

    【讨论】:

      【解决方案4】:

      如上所述,您可以将其放在 ScrollView... 中,如果您希望滚动视图是水平的,请将其放在 HorizontalScrollView... 中,如果您希望您的组件(或布局)同时支持两者像这样放在他们两个里面:

        <HorizontalScrollView>
              <ScrollView>
                  <!-- SOME THING -->
              </ScrollView>
          </HorizontalScrollView>
      

      当然也可以设置layout_widthlayout_height

      【讨论】:

      • +1 只是为了说明设置 layout_width 和 layout_height 的重要性
      【解决方案5】:

      要在文本视图中滚动数据,您可以将其用于文本视图。 并添加 对于其他任何布局,您都可以像上面所说的那样在布局上添加滚动视图。

      /** android:scrollable=true 在 xml 布局中的 textview。

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

      *//

      【讨论】:

        【解决方案6】:
        <?xml version="1.0" encoding="utf-8"?>
        <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        
        android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        
            <TableLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:stretchColumns="1" >
        
                <TableRow
                    android:id="@+id/tableRow1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >
        
                    <RadioGroup
                        android:layout_width="fill_parent"
                        android:layout_height="match_parent" >
        
                        <RadioButton
                            android:id="@+id/butonSecim1"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_gravity="center"
                            android:layout_weight=".50"
                            android:text="@string/buton1Text" />
        
                        <RadioButton
                            android:id="@+id/butonSecim2"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_gravity="center"
                            android:layout_weight=".50"
                            android:text="@string/buton2Text" />
                    </RadioGroup>
                </TableRow>
        
                <TableRow
                    android:id="@+id/tableRow2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >
        
                    <TableLayout
                        android:id="@+id/bilgiAlani"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:visibility="invisible" >
        
                        <TableRow
                            android:id="@+id/BilgiAlanitableRow2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content" >
        
                            <TextView
                                android:id="@+id/bilgiMesaji"
                                android:layout_width="wrap_content"
                                android:layout_height="match_parent"
                                android:layout_weight=".100"
                                android:ems="10"
                                android:gravity="left|top"
                                android:inputType="textMultiLine" />
                        </TableRow>
                    </TableLayout>
                </TableRow>
        
                <TableRow
                    android:id="@+id/tableRow3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >
        
                    <TextView
                        android:id="@+id/metin4"
                        android:layout_height="match_parent"
                        android:layout_weight=".100"
                        android:text="deneme" />
                </TableRow>
        
                <TableRow
                    android:id="@+id/tableRow4"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" >
        
                    <TextView
                        android:id="@+id/metin5"
                        android:layout_height="match_parent"
                        android:layout_weight=".100"
                        android:text="deneme" />
                </TableRow>
            </TableLayout>
        
        </ScrollView>
        

        【讨论】:

          【解决方案7】:

          ScrollViewFrameLayout 的一种特殊类型,它允许用户滚动浏览比实物展示。我只是添加了一些属性。

          <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
               android:fillViewport="true"
               android:scrollbars = "vertical"
               android:scrollbarStyle="insideInset"
              >
              <TableLayout
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:stretchColumns="1"
                  >
                  <!-- Add here which you want -->
              </TableLayout>
          
          </ScrollView>
          

          【讨论】:

            【解决方案8】:

            如何使用滚动视图

            使用ScrollView 并不是很困难。你可以在你的布局中添加一个,然后在里面放任何你想滚动的东西。 ScrollView 只带一个孩子,所以如果你想在里面放一些东西,那么你应该让第一个东西像 LinearLayout

            <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">
            
                    <!-- things to scroll -->
            
                </LinearLayout>
            </ScrollView>
            

            如果您想水平滚动内容,请使用HorizontalScrollView

            让内容填满屏幕

            正如this post 中所述,有时您希望ScrollView 内容填满屏幕。例如,如果您在自述文件的末尾有一些按钮。您希望按钮始终位于文本末尾和屏幕底部,即使文本不滚动。

            如果内容滚动,一切都很好。但是,如果内容小于屏幕大小,则按钮不在底部。

            这可以通过在ScrollView 上使用fillViewPort 和在内容上使用布局权重来解决。使用fillViewPort 使ScrollView 填充父区域。在LinearLayout 中的一个视图上设置layout_weight 会使该视图扩展以填充任何额外的空间。

            这里是 XML

            <?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:fillViewport="true">                        <--- fillViewport
            
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">
            
                    <TextView
                        android:id="@+id/textview"
                        android:layout_height="0dp"                <--- 
                        android:layout_weight="1"                  <--- set layout_weight
                        android:layout_width="match_parent"
                        android:padding="6dp"
                        android:text="hello"/>
            
                    <LinearLayout
                        android:layout_height="wrap_content"       <--- wrap_content
                        android:layout_width="match_parent"
                        android:background="@android:drawable/bottom_bar"
                        android:gravity="center_vertical">
            
                        <Button
                            android:layout_width="0dp"
                            android:layout_weight="1"
                            android:layout_height="wrap_content"
                            android:text="Accept" />
            
                        <Button
                            android:layout_width="0dp"
                            android:layout_weight="1"
                            android:layout_height="wrap_content"
                            android:text="Refuse" />
            
                    </LinearLayout>
                </LinearLayout>
            </ScrollView>
            

            这个答案的想法来自以前的答案,现在已被删除 (link for 10K users)。本回答内容为this post的更新改编。

            【讨论】:

            • 它为我节省了很多时间
            猜你喜欢
            • 1970-01-01
            • 2015-03-09
            • 1970-01-01
            • 2018-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多