【问题标题】:Populate a LinearLayout?填充线性布局?
【发布时间】:2015-11-17 19:41:31
【问题描述】:

ListView 的问题是只有 ListView 是可滚动的,而不是整个屏幕。

例如,如果我有一个像下面这样的布局,只有屏幕的 ListView 部分是可滚动的,而我希望整个屏幕滚动:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolbar"
    android:paddingLeft="24dp"
    android:paddingRight="24dp"
    android:paddingTop="24dp"
    android:paddingBottom="24dp"
    android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, World!"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Lorem ipsum."
            />

        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />

</LinearLayout>

是否可以像上面那样填充LinearLayout,以使整个屏幕可滚动?

【问题讨论】:

  • 在这种情况下,您可能不需要 ListView。只需添加 listview 的内容 - 我不知道你在里面有什么,也许是 textviews 左右 - 动态地添加到应该在滚动视图内的线性布局中。

标签: android android-layout android-listview android-xml


【解决方案1】:

有一个更简单的方法来处理这个问题,ListView 提供了一个addHeaderView(View) 方法所以你可以这样做:

创建一个header_layout.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_height="wrap_content"
         android:layout_width="fill_parent"
         android:orientation="vertical">

         <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, World!"/>

         <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Lorem ipsum."/>
     </LinearLayout>

然后有你的 main_activity.xml

     <?xml version="1.0" encoding="utf-8"?>
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_below="@+id/toolbar"
         android:paddingLeft="24dp"
         android:paddingRight="24dp"
         android:paddingTop="24dp"
         android:paddingBottom="24dp"> 
       <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
     </FrameLayout>

然后在你的 MainActivity.java 中

     public class MainActivity extends Activity{

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main_activity);

                // reference your list
                ListView listView = (ListView) findViewById(R.id.listview);
                // Inflate the header and add the view
                View headerView = LayoutInflater.from(MainActivity.this).inflate(R.layout.header_view, null);
                listView.addHeaderView(headerView);

            }
     }

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

【讨论】:

    【解决方案2】:

    是的,这是可能的。 简单的方法 - 将所有内容包裹在 ScrollView 中,这很丑,不推荐,但可以工作。

    更好的方法 - ListViewaddHeaderView(View v)addFooterView(View v) 如果您想要上面的内容使用页眉,如果您想要下面的内容,只需使用页脚。在您的情况下,将这两个 TextViews 带到新的布局文件中。像这里一样充气

    LayoutInflater.from(context).inflate(R.layout.new_created_layout_with_these_two_text_views,null) 
    

    并将创建的视图添加为标题。

    【讨论】:

      【解决方案3】:

      您正在尝试做的事情有两个问题

      1) 您不能滚动LinearLayout。为了滚动LinearLayout,你必须插入一个ScrollView作为它的第一个也是唯一的孩子,然后把你所有的孩子视图放在ScrollView

      2)您尝试做的事情将行不通。 ScrollViewListView 只是进入内容的窗口。实际的ListView 本身仅与它在屏幕上占据的空间一样大,而不是其中包含的内容的大小。如果您希望ListViewTextView 的内容一起滚动,您应该将TextView 添加到ListView 中,或者添加一个环绕视图作为ListView 的标题看法。您的另一种选择是根本不使用ListView,而只是以编程方式将所有孩子附加到您的ScrollView

      注意:您不应使用ScrollViewListView。选择一种方法并坚持下去。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多