ppi的运算方式是:
PPI = √(长度像素数2 + 宽度像素数2) / 屏幕对角线英寸数
dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,
dp和px的换算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。
sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。
sp 与 px 的换算公式:sp*ppi/160 = px
概括起来:
px = dp*ppi/160
dp = px / (ppi / 160)
px = sp*ppi/160
sp = px / (ppi / 160)
dp = sp?
public static int dip2px(Context context,float dipValue){
final float scale=context.getResouses().getDisplayMetrics().density;
return (int)(dipValue*scale+0.5f);
}
public static int px2dp(Context context,float pxValue){
final float scale = context.getResource.getDisplayMetrics().density;
return (int)(pxValue/scale+0.5f);
}
另外:mlogger.info(getResources().getDimension(R.dimen.margin_normal)); 从xml所获取到的会是转换为px的float型数据。
3.用代码设置控件位置(代码设置会覆盖xml里面设置的参数):
LinearLayout.LayoutParams fp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
int margin = ViewUtil.dip2px(context, 10);
fp.setMargins(margin, 0, margin, margin * 2);
flowLayout.setLayoutParams(fp);
import android.content.res.Resources;
/**
* px 和dip之间转换方法
* @author pxy
* @version 1.0
* @since 2016-05-19 11:29
*/
public class DimUtil {
public static int getScreenWidth(){
return Resources.getSystem().getDisplayMetrics().widthPixels;
}
public static int getScreenHeight(){
return Resources.getSystem().getDisplayMetrics().heightPixels;
}
public static int pxToDip(int px){
final float scale = Resources.getSystem().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
public static float dipToPx(float dip){
final float scale = Resources.getSystem().getDisplayMetrics().density;
return (dip * scale + 0.5f);
}
public static int pxToSp(float px) {
final float fontScale = Resources.getSystem().getDisplayMetrics().scaledDensity;
return (int) (px / fontScale + 0.5f);
}
public static int spToPx( float spValue) {
final float fontScale = Resources.getSystem().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}
网络工具类:
public class NetworkHelper {
private final static String TAG="NetworkHelper";
/**
* 判断网络是否链接成功
* @param context
* @return
*/
public static boolean isNetWorkConnected(Context context){
if (context == null)
return false;
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivity.getActiveNetworkInfo();
return info != null && info.isConnectedOrConnecting();
}
/**
* 是否是WIFI连接
* @param context
* @return
*/
public static boolean isWifi(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
return info != null && info.getType() == ConnectivityManager.TYPE_WIFI;
}
/**
* 获取网络信息
* @param context
* @return
*/
public static String getNetworkInfo(Context context) {
if (context == null)
return "";
StringBuilder builder = new StringBuilder();
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivity.getActiveNetworkInfo();
builder.append(info == null ? "" : info.toString());
return builder.toString();
}
}