1.View重绘顺序 ondraw--->dispatchDraw(子控件)
invalidate() / postInvalidate() 通知系统重绘
继承ViewGroup 重写ondraw需设置setWillNotDraw(false) / 设置背景
2.dp转px
public int dipTopx(float dpValue) {
// 获取屏幕像素比例
final float scale = getContext().getResources().getDisplayMetrics().density;
return (int) (dpValue * scale );
}
3.点击事件系统调用顺序
首先触发ACTIVITY的dispatchTouchEvent
然后触发ACTIVITY的onUserInteraction
然后触发LAYOUT的dispatchTouchEvent
然后触发LAYOUT的onInterceptTouchEvent
参考:
http://blog.csdn.net/G_rrrr/article/details/4861189
http://blog.csdn.net/ddna/article/details/5473293
子View通知父VIew不拦截监听
requestDisallowInterceptTouchEvent(相当于onInterceptTouchEvent强制返回false)
4.listview
背景透明 cacheColorHint=“#00000000”
去除上下黑边android:fadingEdge="none" 代码 setVerticalFadingEdgeEnabled(false) / setFadingEdgeLength(length)
http://blog.csdn.net/avenleft/article/details/7334060
5. viewpager、GridView等控件去蓝色渐变 setOverScrollMode(View.OVER_SCROLL_NEVER);
6.多语言切换
代码切换本程序语言
Resources resources = getResources();//获得res资源对象
Configuration config = resources.getConfiguration();//获得设置对象
DisplayMetrics dm = resources .getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
config.locale = Locale.US; //设置语言
resources.updateConfiguration(config, dm);
参考:
http://blog.csdn.net/jiangxinyu/article/details/8597746
7.监听view生成宽高
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
{
public boolean onPreDraw()
{
int height = metroLayout.getMeasuredHeight();
int width = metroLayout.getMeasuredWidth();
return true;
}
});