Android中的dp,px,sp互转问题以及 View.setLayoutParams, 以及网络相关工具类

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();
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值