http://developer.android.com/reference/android/widget/SlidingDrawer.html
SlidingDrawer 를 이제 지원 안하겠다고 한다. 굳이 사용하려면 source 를 app 에 넣어서 사용하라고 한다.
그래서 한 번 넣어봤다.
attrs.xml
여기서 /res/attr.xml 에 넣을 내용을 긁어 오자. orientation 만 아래처럼 수정해 주면 된다.<declare-styleable name="SlidingDrawer"> <!-- Identifier for the child that represents the drawer's handle. --> <attr name="handle" format="reference" /> <!-- Identifier for the child that represents the drawer's content. --> <attr name="content" format="reference" /> <!-- Orientation of the SlidingDrawer. --> <attr name="orientation"> <enum name="horizontal" value="0" /> <enum name="vertical" value="1" /> </attr> <!-- Extra offset for the handle at the bottom of the SlidingDrawer. --> <attr name="bottomOffset" format="dimension" /> <!-- Extra offset for the handle at the top of the SlidingDrawer. --> <attr name="topOffset" format="dimension" /> <!-- Indicates whether the drawer can be opened/closed by a single tap on the handle. (If false, the user must drag or fling, or click using the trackball, to open/close the drawer.) Default is true. --> <attr name="allowSingleTap" format="boolean" /> <!-- Indicates whether the drawer should be opened/closed with an animation when the user clicks the handle. Default is true. --> <attr name="animateOnClick" format="boolean" /> </declare-styleable>
SlidingDrawer.java
Source code 는 여기서 가져 오자.그러면 이제 mTop, mBottom, mLeft, mRight 값이 문제가 된다. 이것은 @hide annotation 때문인데, 이녀석은 실제 Android SDK 를 build(compile) 할 때 상속되지 않는다고 한다. 그래서 android.jar 에는 들어있지 않고, 그래서 우리가 상속을 해도 사용할 수 없다고 한다.[ref.1]
그러면 우리는 이 값을 어떻게 얻어와야 하는가.
- getTop(),
- getLeft(),
- getBottom(),
- getRight()
이 녀석을 onCreate() 에서 아래처럼 해주면 될 듯 하다.
public SlidingDrawer(Context context, AttributeSet attrs, int defStyle) { ... mRight = this.getRight(); mLeft = this.getLeft(); mBottom = this.getBottom(); mTop = this.getTop(); ...
해결책은 여러가지가 ref.3 에 나와 있다. 그 중에서 여기서는 화면이 focus 되는 시점에 호출되는
onWindowFocusChanged()를 이용한다. 이 녀석이 ref.2 에 의하면 가장 확실하게 화면이 user 에게 보여지는 순간을 가리킨다고 한다.[ref. 2]
소스를 참고하자.
Reference
- http://stackoverflow.com/questions/4916215/protected-fields-not-visible-to-subclasses
- http://stackoverflow.com/questions/8879504/methods-to-get-position-of-view-returns-0
- http://stackoverflow.com/questions/4142090/how-do-you-to-retrieve-dimensions-of-a-view-getheight-and-getwidth-always-r
java 파일부분이 잘 이해가 안가는데 코드를 가져와서 어디다가 넣어야 하나요?
답글삭제그리고 넣고 slidingdrawer사용하듯이 쓰면 되나요?
소스를 참고하자. --> 이부분을 봐주세요 ^^ ; 여기서 예제 소스를 download 할 수 있습니다.
답글삭제