在Android开发中比较头疼的是Android的分辨率问题,那么这里给大家介绍个万能办法,这个办法的优点是可以实现万能适应,给开发和美工设计提供了依据,但是对开发来说代码量也不少,具体办法你听我来说:
(1)获取屏幕的尺寸
| WindowManager windowManager = (WindowManager) |
| getSystemService(Context.WINDOW_SERVICE); |
| Display d = windowManager.getDefaultDisplay(); |
| DisplayMetrics dm = getResources().getDisplayMetrics(); |
| mScreenDensity = dm.density; |
(2)美工设计图的尺寸
(3)获取缩放比例
| float scaleWidth = mWidth / uiWidth; |
| float scaleHeight = mHeight/ uiHeight; |
(4)所有布局的尺寸用代码实现:
| public static int getWidthSize( int size){ |
|
return ( int ) (size * scaleWidth); |
| public static int getHightSize( int size){ |
|
return ( int ) (size * scaleHeight); |
| public static float getTextSize( int pxSize){ |
|
return (pxSize*scaleHeight) / mScreenDensity; |
| public static void setViewSize( int width, int height, View v){ |
|
int paramWidth = getWidthSize(width); |
|
int paramHeight = getHightSize(height); |
|
ViewGroup.MarginLayoutParams params |
|
= (ViewGroup.MarginLayoutParams) v.getLayoutParams(); |
|
params.width = paramWidth; |
|
params.height = paramHeight; |
|
v.setLayoutParams(params); |
| public static void setViewPadding( int left, int top, int right, int bottom, |
|
left = getWidthSize(left); |
|
right = getWidthSize(right); |
|
bottom = getWidthSize(bottom); |
|
v.setPadding(left, top, right, bottom); |
| public static void setViewMargin( int left, int top, int right, int bottom, |
|
int paramLeft = getWidthSize(left); |
|
int paramTop = getHightSize(top); |
|
int paramRight = getWidthSize(right); |
|
int paramBottom = getHightSize(bottom); |
|
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) |
|
params.leftMargin = paramLeft; |
|
params.rightMargin = paramRight; |
|
params.topMargin = paramTop; |
|
params.bottomMargin = paramBottom; |
|
v.setLayoutParams(params); |
(5)这里是设置尺寸的代码:
| setViewSize( 100 , 100 , mView); |
| setViewMargin( 20 , 0 , 0 , 20 , mView); |
| setViewPadding( 10 , 10 , 10 , 10 , mView); |
| mTextView.setTextSize(getTextSize( 30 )); |
由上在设计效果图时,可对图内元素进行尺寸标注,程序即可实现按比例缩放。