ScrollView的问题和设置布局

时间:2017-11-30 08:48:23

标签: android listview android-linearlayout android-scrollview

这里我是android开发的新手。如果有什么事情不清楚,请不要介意。

我对此问题进行了足够的研究,然后将其标记为重复,请更新解决方案。

我在这里添加了一个布局布局的图像,我想在这里实现。

此处listView仅显示为1个项目。如果我滚动,则所有项目都将以此高度显示滚动。

sample image

此处我的xml结构

<LinearLayout>(parent)
     <ScrollView>
          <LinearLayout>
               <LinearLayout>
                weight: __
                -----------
               </LinearLayout>
               <ListView>
                   h:match_parent
                   w:wrap_content
                   weight:__
               </ListView>
               <LinearLayout>
                   weight:__
                --------------
               </LinearLayout>
          </LinearLayout>
     </ScrollView>
</LinearLayout>

我从数据库获取大量数据集,并且必须在LinearLayouts的中间显示这些数据集。现在我使用ListView但似乎无法在这里使用我的期望。

请建议我是否可以在此ListView执行此操作,或者如何为每个数据集使用LinearLayout个数字块?

更新 这就是我所期望的,如图所示。

sample_layout

5 个答案:

答案 0 :(得分:1)

试试这个

<LinearLayout>(parent)
     <NestedScrollView>
          <LinearLayout>
               <LinearLayout>                    
                w:wrap_content
                h:wrap_content
               </LinearLayout>
               <ListView>
                   w:match_p__arent
                   h:match_p__arent
                   weight:1
                   NestedScroll:true
               </ListView>
               <LinearLayout>
                   w:match_p__arent
                   h:match_p__arent
                   weight:1 
               </LinearLayout>
          </LinearLayout>
     </NestedScrollView>
</LinearLayout>

答案 1 :(得分:1)

您的ListView需要此方法

    public static void setListViewHeightBasedOnItems(ListView target_Listview, int limit) // LIMIT 0 FOR SHOWING ALLL CONTENTS
{
    if (limit == 0) {
        ListAdapter listAdapter = target_Listview.getAdapter();
        if (listAdapter != null) {

            int numberOfItems = listAdapter.getCount();

            // Get total height of all items.
            int totalItemsHeight = 0;
            for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
                //                if(itemPos < 4)
                //                {
                View item = listAdapter.getView(itemPos, null, target_Listview);
                item.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
                Log.e("" + itemPos, "" + item.getMeasuredHeight());
                totalItemsHeight += item.getMeasuredHeight();
                //                }
            }

            // Get total height of all item dividers.
            int totalDividersHeight = target_Listview.getDividerHeight() * (numberOfItems - 1);

            // Set list height.
            ViewGroup.LayoutParams params = target_Listview.getLayoutParams();
            params.height = totalItemsHeight + totalDividersHeight;
            target_Listview.setLayoutParams(params);
            target_Listview.requestLayout();

            //  return true;

        }
        else {

        }
    }
    else {
        ListAdapter listAdapter = target_Listview.getAdapter();
        if (listAdapter != null) {

            int numberOfItems = listAdapter.getCount();

            // Get total height of all items.
            int totalItemsHeight = 0;
            for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
                if (itemPos < limit) {
                    View item = listAdapter.getView(itemPos, null, target_Listview);
                    item.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
                    Log.e("" + itemPos, "" + item.getMeasuredHeight());
                    totalItemsHeight += item.getMeasuredHeight();
                }
            }

            // Get total height of all item dividers.
            int totalDividersHeight = target_Listview.getDividerHeight() * (numberOfItems - 1);

            // Set list height.
            ViewGroup.LayoutParams params = target_Listview.getLayoutParams();
            params.height = totalItemsHeight + totalDividersHeight;
            target_Listview.setLayoutParams(params);
            target_Listview.requestLayout();
        }


    }
}

ListView上设置适配器后,只需调用方法并将参数中的ListView作为第二个参数传递给参数。

One Suggestion from my side:您应该使用RecyclerView而不是listview。在设置好所有内容后,只需要为此写一行(适配器等)

recyclerView.HasFixedSize();

希望我的回答会有所帮助。

答案 2 :(得分:0)

可能需要进一步澄清你正在努力实现的目标。

如果ListView应该更长并且滚动列表中的更多项目,我可能会建议您使用RecyclerView。它的设置稍微多一点,但允许根据概念创建更复杂的布局。

如果您想进一步搜索,有许多很好的参考资料可以学习RecyclerView的方式:

答案 3 :(得分:0)

试试这种方式

<LinearLayout>   
      <LinearLayout>
           <LinearLayout>
            weight: __
            -----------
           </LinearLayout>
           <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <ListView>
               h:match_parent
               w:wrap_content
               weight:__
            </ListView>
           </ScrollView>
           <LinearLayout>
               weight:__
            --------------
           </LinearLayout>
      </LinearLayout>

答案 4 :(得分:0)

enter image description here
enter image description here

我已经尝试过在我的Android工作室工作,我的工作能够滚动视图。然后你就有点狡猾了。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorAccent">

        <LinearLayout
            android:id="@+id/first"
            android:layout_width="match_parent"
            android:layout_height="50dp"

            android:background="@color/colorAccent"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:text="@string/hello" />

        </LinearLayout>

        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:background="@color/black_overlay"
            android:layout_below="@+id/first" />

        <LinearLayout
            android:id="@+id/second"
            android:layout_width="match_parent"
            android:layout_height="550dp"

            android:background="@color/colorAccent"
            android:layout_below="@+id/listview"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:text="@string/hello" />

        </LinearLayout>


    </RelativeLayout>


</ScrollView>

enter image description here