片段中的可滚动视图

时间:2012-08-17 10:42:59

标签: android scrollview fragment custom-component

我已经被困在这几天了,无法弄清楚我做错了什么(希望这不是我错过的愚蠢行为)。

要求

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

所有视图(如GridView和ListView)都能完美运行。但是我需要制作另一个适合Fragment的视图,它在概念上有点不同。视图必须是垂直可滚动的,因为它的高度可能会比屏幕大小更大。我不关心视图是以编程方式创建还是动态地从.xml中膨胀。我尝试了两种方法,两者都给出了相同的结果。

解决方案1(更为可取)

我尝试制作自定义视图并将其推送到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>

我使自定义视图显示一个非常大的矩形,因此它超出了屏幕大小。  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(更不用说优先)

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

1 个答案:

答案 0 :(得分:1)

<ScrollView>
//your textview goes here
</ScrollView>

例如,如果您有TextView并且希望它可以滚动,那么您可以像上面给出的那样使用ScrollView。

确保在ScrollView中只嵌套一个TextView