私はこれに数日間立ち往生しており、何が間違っているのか理解できません(私が見逃したばかげたものではないことを願っています).
要求事項
LinearLayout のフラグメントを含む FragmentPager があります。レイアウトには、ユーザーのナビゲーションに従って変更できるボタンとビューがあります。
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 で描画されるように、ビューの描画を別の場所に実装する必要がありますか?