如何制作包含ListView + ImageView的可滚动布局

时间:2018-07-12 07:54:38

标签: android listview android-fragments imageview

所以,我在布局文件中有一个带有listview的片段。该列表视图上方是带有徽标的图像视图。

Layout

我面临的问题是我无法将滚动条设置为整个布局。 我在其他帖子上有红色,您不应该这样做,但是如果我必须以其他方式执行的话,我必须重做很多代码。

我也从API获取数据,元素的数量可以改变。这就是为什么我使用列表视图。

我对布局类型没有偏好。目前,我正在使用ScrollView布局。

    private void Update()
{
    Vector3 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    if (Input.GetMouseButton(0))
    {
        if (mouse.y > 0f)
        {

        }
        else
        {

        }
    }
}

有人可以解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

尝试将布局xml更改为:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragments.HomeFragment"
    android:fillViewport="true">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp"
        android:layout_gravity="center"
        android:adjustViewBounds="true"
        android:src="@drawable/logo"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ListView
            android:id="@+id/listFemArrangementer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:listSelector="@color/white"
            android:scrollbars="none"/>
    </ScrollView>

</LinearLayout>

答案 1 :(得分:0)

可以使用NestedScrollView,但首先最好使用RecyclerView而不是ListView

下面是演示此布局的简单xml

<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragments.HomeFragment"
    android:fillViewport="true">

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

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="25dp"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:src="@drawable/logo"/>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/listFemArrangementer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"/>

    </LinearLayout>

</android.support.v4.widget.NestedScrollView>

答案 2 :(得分:0)

找到了解决我问题的方法。

我做了一个listviewclass并禁用了滚动等。

public class ScrollDisabledListView extends ListView {

private int mPosition;

public ScrollDisabledListView(Context context) {
    super(context);
}

public ScrollDisabledListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;

    if (actionMasked == MotionEvent.ACTION_DOWN) {
        // Record the position the list the touch landed on
        mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
        return super.dispatchTouchEvent(ev);
    }

    if (actionMasked == MotionEvent.ACTION_MOVE) {
        // Ignore move events
        return true;
    }

    if (actionMasked == MotionEvent.ACTION_UP) {
        // Check if we are still within the same view
        if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
            super.dispatchTouchEvent(ev);
        } else {
            // Clear pressed state, cancel the action
            setPressed(false);
            invalidate();
            return true;
        }
    }

    return super.dispatchTouchEvent(ev);
}

然后我在布局(scrollview)中使用了此类

<no.packagename.ScrollDisabledListView
            android:id="@+id/listFemArrangementer"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:listSelector="@color/white"
            android:scrollbars="none"
            android:padding="0px"
            >
        </no.packagename.ScrollDisabledListView>

然后我找到并使用了适配器的列表高度

listView.setAdapter(adapter);


    if(adapter != null){
        int totalHeight = 0;
        for (int i = 0; i < adapter.getCount(); i++) {
            View listItem = adapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }