android - fragment 中的可 ScrollView

标签 android scrollview fragment custom-component

我已经坚持了几天了,无法弄清楚我做错了什么(希望这不是我错过的愚蠢的事情)。

要求

我有一个 FragmentPager,其中包含带有 LinearLayout 的 fragment 。该布局有一个按钮和一个可以根据用户导航更改的 View 。

GridView 和 ListView 等所有 View 都可以完美运行。但是我需要提出另一个适合 Fragment 的观点,这个观点在概念上有点不同。 View 必须可以垂直滚动,因为它的高度可以大于屏幕尺寸。我不在乎 View 是以编程方式创建的还是从 .xml 动态扩展的。我尝试了这两种方法,都给出了相同的结果。

解决方案 1(更可取)

我尝试创建一个自定义 View 并将其推送到 ScrollView 中。这是相关的 .xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroller"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true" >
    <com.myPackage.MyView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
</com.myPackage.MyView>
</ScrollView>

我制作了自定义 View 以显示一个非常大的矩形,因此它超过了屏幕尺寸。 MyView 的代码:

package com.myPackage.MyView;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {
    public MyView(Context context) {
        super(context);
    }

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

    @Override
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        canvas.drawRect(0, 0, 100, 8000, paint);
    }
}

问题是 ScorllView 不滚动。

我尝试删除 fillViewport(正如我在另一个答案中看到的那样),结果什么也没有显示, 我还尝试在 ScrollView 内部和外部添加布局,但没有。尝试所有“fill_parent”/“wrap_content”组合也导致非滚动 ScrollView。

我做错了什么?

解决方案 2(不太可取)

我可以(粗暴地)将 View 的概念强加到 ListView 中,它确实可以很好地滚动,但我无法让列表中的 View 显示我的自定义 View 。调试时,我注意到从未调用过 onDraw。我是否需要在其他地方实现 View 的绘制,以便将其绘制在 ListView 中?

最佳答案

Iain_b 是正确的,当绘制 View 时,它会剪掉任何不在其布局范围内的内容。对于自定义 View ,这通常通过重写 OnMeasure 方法来完成。目前,您将自定义 View 的高度设置为 wrap_content,在您的情况下,这将导致高度为 0 的 View (它没有内容)。不幸的是,重写 OnMeasure 意味着您不能为您的自定义 View 使用高度和宽度属性,但是当 Android 执行布局传递时,您将在 OnMeasure 调用中有更好的控制。

这在 Android 文档中都有描述:Custom Components

关于android - fragment 中的可 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12004275/

相关文章:

安卓应用内计费 : virtual money

带有 xliff :g inserts a blank space 的 Android 字符串格式

android - 如何在不使用支持库的情况下实现水平滑动?

android - 捕获滑动以消除 ViewPager 中的 ListView 手势

Android Emulator 不会阻止外部磁盘写入?

iphone - UIView backgroundColor与图像

android 可滚动 TextView 在 ScrollView 中不起作用

android - 滚动+点击后 ScrollView 停止工作

android - 自定义操作栏选项卡 View

java - Android Studio - EditText.addTextChangedListener 不起作用