ListView
メモ帳のように、つまり水平線の背景パターンで表示したい。メモ帳のサンプルに従って、次のように拡張TextView
およびオーバーライドできます。onDraw()
r = new Rect();
for (int i = 0; i < getLineCount(); i++) {
int baseline = getLineBounds(i, r);
canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
}
super.onDraw(canvas);
ただし、リストに要素が数個しかない場合は、ページを埋めるのに十分な行がありません(実際の結果は左側にあり、右側に必要です)。
~~~
そこで、別のアプローチを試しました。オーバーライドしますListView.onDraw()
。残念ながら、トップスクロールを計算する即時の方法はありません(getScrollY()
常に戻ります0
)。何よりも、すべてのキャッシュと描画の最適化を無効にする必要があります。これにより、大きなリストに対してスケーラブルでないことを除いて、パフォーマンスが確実に低下します。
最後に、私の行ウィジェットはプレーンテキストビューではありません。メインコンテンツが-sure-aであっても、これらは複雑なレイアウトTextView
です。つまり、レイアウト内では呼び出すことができずgetLineBounds()
(レイアウトはテキストビューではありません)、テキストビューでTextView
は周囲のレイアウトよりも小さいため呼び出すことができないため、4つの側面にギャップが生じます。
カスタムウィジェットを表示し、ウィンドウ全体を水平線で埋めるソリューションを設計するにはどうすればよいですか?単純なアプローチは、使用可能なすべてのスペースに収まる限り、ダミーの空の要素をリストに追加することですが、これはハックであり、より良い方法が必要です。線の間の距離は実行時にカスタマイズ可能でなければならないため、背景画像を使用することはできません。