Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

에이치의 모바일 앱 개발

ScrollView 본문

Android/Android 개발 소스

ScrollView

로이누리 2017. 12. 23. 04:56

1. ScrollView안에 ListView 크기 설정

<Linearlayout~~~
<ListView
android:id="@+id/citylistview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Animation.AppCompat.DropDownUp"
android:dividerHeight="0.0dip"
android:typeface="monospace"
android:scrollingCache="false"
android:fadingEdge="none"
>
</ListView>

int totalHeight = 0;
for (int i = 0; i <adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, listview);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listview.getLayoutParams();

params.height = totalHeight + (listview.getDividerHeight() * (adapter.getCount() - 1));
((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10);
listview.setLayoutParams(params); 


2. ScrollView 갱신

ScrollView 는 바른 View 와 마찬가지로 화면 생성 초기에 그려지면서 스크롤 높이가 고정이 된다.
때문에 ScrollView 내 EditText 의 멀티라인 증감시에도 스크롤 높이는 변하지 않는다.
이 때 ScrollView의 높이를 동적으로 변경하려면 다음과 같이 소스를 구성하면 된다.

private ScrollView mScrollView;


//호출하면 스크롤뷰의 레이아웃이 재설정됨.

mScrollView.invalidate();

mScrollView.requestLayout();

}


EX)

@Override

public void afterTextChanged(Editable s) {

mScrollView.invalidate();

mScrollView.requestLayout();

}

다음의 메소드로도 설정이 가능하다.

setOnScrollListener


3. 특정 위치로 스크롤 바 이동

/**

* ex) last position

**/

private void scrollbarMove() {
final View viewSize = mAdapter.getView(0, null, listView);
viewSize.measure(0, 0);
Log.e("Listview get focus", String.valueOf(lastPoint) + ", " + viewSize.getMeasuredHeight());
scroll.post(new Runnable() {
public void run() {
scroll.scrollTo(0, lastPoint * viewSize.getMeasuredHeight());
}
}); 마지막 지점


4. ScrollView 로 ListView 를 두개 잡고 있을 경우 커서 가져오기

private View.OnTouchListener mListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
timeTableScroll.requestDisallowInterceptTouchEvent(true);
return false;
}
};



5. ScrollView 위에 잔상이 남을 시


ScrollView 를 상속 받아 아래와 같은 소스코드를 추가한다.

public void computeScroll() {
super.computeScroll();

requestLayout();

}


Comments