이번 포스팅은 View 구성 시 터치 영역을 넓히는 방법에 대하여 알아보도록 하겠습니다.
Layout 구조는 아래와 같습니다.
전체 위젯을 감싸고 있는 test_parent layout 안에 test_view가 들어있는 상황입니다.
위젯의 터치영역이 너무 작아 Layout의 크기만큼 늘리고 싶을 때 아래와같이 touchDelegate를 셋팅해주면 됩니다.
View mTestLayout = rootView.findViewById(R.id.test_parent_layout); ViewGroup.LayoutParams params = mTestLayout.getLayoutParams(); mTestLayout.setTouchDelegate(
new TouchDelegate(
new Rect(0, 0, params.width, params.height),
rootView.findViewById(R.id.test_view)
)
);
위와 같이 구현을 하면 test_parent_layout 영역을 눌러도 test_view의 클릭 리스너가 호출이 됩니다.
View가 MATCH_PARENT이거나 WRAP_CONTENT일 경우, Size가 정확하게 선언되어 있지 않으므로
아래와 같이 OnGlobalLayoutListener에서 처리하는 것도 하나의 방법입니다.
rootView.findViewById(R.id.test_parent_layout).getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { View mTestLayout = rootView.findViewById(R.id.test_parent_layout); mTestLayout .setTouchDelegate(
new TouchDelegate(
new Rect(0, 0, mTestLayout .getWidth(), mTestLayout .getHeight()),
rootView.findViewById(R.id.test_view)
)
); } });
'Development > Android' 카테고리의 다른 글
[Android] GridLayout (0) | 2016.04.18 |
---|---|
[Android] dp를 px값으로 변환 (0) | 2016.04.14 |
[Android] AsyncTask 중지하기 (0) | 2016.03.23 |
[Android] Intent로 객체 전달하기 (0) | 2016.02.12 |
[Android] ListView 계층 구조 (0) | 2015.08.11 |