ScrollViewの中にいろいろ部品を突っ込んでその中にListViewも含まれる場合、普通に書くとスクロールされないんですよ。
ListViewの中でスクロールされてしまう感じ...
下のイメージ参照。
これをスクロールできるように画面に表示するにはカスタマイズすれば良いらしいです!
▼カスタムListView
class CustomListView : ListView {
private val MAX_SIZE = 99
constructor(context: Context?) : super(context) {
}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
}
constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
var newHeight = 0
val heightMode = MeasureSpec.getMode(heightMeasureSpec)
val heightSize = MeasureSpec.getSize(heightMeasureSpec)
if (heightMode != MeasureSpec.EXACTLY) {
val listAdapter: ListAdapter? = adapter
if (listAdapter != null && !listAdapter.isEmpty) {
var listPosition = 0
listPosition = 0
while (listPosition < listAdapter.count
&& listPosition < MAX_SIZE
) {
val listItem: View = listAdapter.getView(listPosition, null, this)
if (listItem is ViewGroup) {
listItem.setLayoutParams(
LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT
)
)
}
listItem.measure(widthMeasureSpec, heightMeasureSpec)
newHeight += listItem.getMeasuredHeight()
listPosition++
}
newHeight += dividerHeight * listPosition
}
if (heightMode == MeasureSpec.AT_MOST && newHeight > heightSize) {
if (newHeight > heightSize) {
newHeight = heightSize
}
}
} else {
newHeight = measuredHeight
}
setMeasuredDimension(measuredWidth, newHeight)
}
}
▼レイアウト
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
・・・略・・・
<jp.co.sample.ui.CustomListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</LinearLayout>
</ScrollView>