18 June 2013
在Android 4.0.4機器上的 DatePicker一定會發生scroll的小問題,
(但是4.2.3不會發生!而我推測或許3.x以上~4.0.4以下的device都會發生)


如下圖,
你會發現經過scrolling以後,在年/月/日的三個欄位,位置都怪怪的
原因是因為在做position時,那個event是被parent截取到!
但理應上應該是DatePicker截取到才對!



所以workaround就是,自己定義一個class,以及extend DatePicker!
然後去取消parent截取event!

public class CustomDatePicker extends DatePicker {

public CustomDatePicker(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomDatePicker(Context context) {
super(context);
}

@SuppressLint("NewApi")
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
/*
* Prevent parent component intercept touch event.
* because only happened on Android 3.x ~ 4.0.4, so we need to check the current os version.
*/
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){
if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
ViewParent p = getParent();
if (p != null){
// disallow its parent intercept touch event.
p.requestDisallowInterceptTouchEvent(true);
}
}
}

return false;
}

}


而使用方式就是在你的layout.xml中指定我們上方定義的class,
<view android:id="@+id/share_expires" 
android:layout_width="fill_parent"
android:visibility="gone"
android:layout_height="wrap_content"
class="net.kenyang.util.CustomDatePicker" >
</view>


這樣就能解決scrolling的問題!



blog comments powered by Disqus