Android中的手机屏幕像素的几种获取方式

在Android开发中,获取手机屏幕像素的方法有多种。在这里,我仅仅做一个小小的总结,将这些方法分为两类。一类是使用Activity类来获取,另一类便是使用上下文(Context)来获取。

1、使用Activity类中的方法来获取,使用范围是在Activity的类及子类中和有传入Activity类及子类的对象参数的方法中使用
①在Activity的子类中使用

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 通过Activity类中的getWindowManager()方法获取窗口管理,再调用getDefaultDisplay()方法获取获取Display对象
        Display display = getWindowManager().getDefaultDisplay();

        // 方法一(推荐使用)使用Point来保存屏幕宽、高两个数据
        Point outSize = new Point();
        // 通过Display对象获取屏幕宽、高数据并保存到Point对象中
        display.getSize(outSize);
        // 从Point对象中获取宽、高
        int x = outSize.x;
        int y = outSize.y;
        // 通过吐司显示屏幕宽、高数据
        Toast.makeText(this, "手机像素为:" + x + "x" + y, Toast.LENGTH_LONG).show();

        // 方法二(不推荐使用)直接通过Display对象获取屏幕宽、高数据
        int width = display.getWidth();
        int height = display.getHeight();
        // 通过吐司显示屏幕宽、高数据
        Toast.makeText(this, "手机像素为:" + width + "x" + height, Toast.LENGTH_LONG).show();
    }
}

②在传入Activity类及子类对象的方法中调用

public class Utils {
    /**
     * 该方法获取屏幕分辨率的值
     * @param activity 调用此方法的Activity对象
     * @return Point 存有屏幕分辨率的对象
     */
    public static Point getSize(Activity activity) {
        // 通过Activity类中的getWindowManager()方法获取窗口管理,再调用getDefaultDisplay()方法获取获取Display对象
        Display display = activity.getWindowManager().getDefaultDisplay();
        // 使用Point来保存屏幕宽、高两个数据
        Point outSize = new Point();
        // 通过Display对象获取屏幕宽、高数据并保存到Point对象中
        display.getSize(outSize);

        return outSize;
    }
}
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 通过调用Utils类中的getSize方法,传入当前Activity作为参数获取
        Point outSize = Utils.getSize(this);
        // 从Point对象中获取宽、高
        int x = outSize.x;
        int y = outSize.y;
        // 通过吐司显示屏幕宽、高数据
        Toast.makeText(this, "手机像素为:" + x + "x" + y, Toast.LENGTH_LONG).show();
    }
}

2、使用上下文(Context)获取系统服务来获取,使用范围是在一些没有Activity及其子类对象而只有上下文(Context)的类或者方法中,比如Fragment类及其子类中。

public class Utils {
    /**
     * 该方法获取屏幕分辨率的值
     * 
     * @param context
     *            调用此方法的上下文对象
     * @return Point 存有屏幕分辨率的对象
     */
    public static Point getSize(Context context) {
        // 通过上下文的getSystemService()方法获取系统服务来获取WindowManager对象
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        // 通过WindowManager对象的getDefaultDisplay()方法获取Display对象
        Display display = windowManager.getDefaultDisplay();
        // 使用Point来保存屏幕宽、高两个数据
        Point outSize = new Point();
        // 通过Display对象获取屏幕宽、高数据并保存到Point对象中
        display.getSize(outSize);
        return outSize;
    }
}
public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_fragment, null);
        // 通过调用Utils类中的getSize方法,通过View对象的getContext()方法获取Context对象作为参数获取Point对象
        Point outSize = Utils.getSize(view.getContext());
        // 从Point对象中获取宽、高
        int x = outSize.x;
        int y = outSize.y;
        // 通过吐司显示屏幕宽、高数据
        Toast.makeText(view.getContext(), "手机像素为:" + x + "x" + y, Toast.LENGTH_LONG).show();
        return view;
    }
}

3、上面演示了两种分别以Activity和Context作为参数获取屏幕分辨率的方法,如果是仅仅有两种单独的使用,那么分别选用两种方法的对应条件下的方法使用即可。但是如果同时需要在Activity中调用,也需要在Fragement中调用来获取分辨率,其实只需要一个方法也就可以了,那就是以Activity作为参数的。因为Activity是Context的子类,在Context作为参数传入该方法时,只要强制将Context转换成Activity类型就可以了。

public class Utils {
    /**
     * 该方法获取屏幕分辨率的值
     * @param activity 调用此方法的Activity对象
     * @return Point 存有屏幕分辨率的对象
     */
    public static Point getSize(Activity activity) {
        // 通过Activity类中的getWindowManager()方法获取窗口管理,再调用getDefaultDisplay()方法获取获取Display对象
        Display display = activity.getWindowManager().getDefaultDisplay();
        // 使用Point来保存屏幕宽、高两个数据
        Point outSize = new Point();
        // 通过Display对象获取屏幕宽、高数据并保存到Point对象中
        display.getSize(outSize);

        return outSize;
    }
}
public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_fragment, null);
        // 通过调用Utils类中的getSize方法,通过View对象的getContext()方法获取Context对象,并且强制转换成Activity作为参数获取Point对象
        Point outSize = Utils.getSize((Activity)view.getContext());
        // 从Point对象中获取宽、高
        int x = outSize.x;
        int y = outSize.y;
        // 通过吐司显示屏幕宽、高数据
        Toast.makeText(view.getContext(), "手机像素为:" + x + "x" + y, Toast.LENGTH_LONG).show();
        return view;
    }
}

4、有两个类可以获取到屏幕的像素,之前我们使用到的都是Display类,这个类保存着关于屏幕的很多相关的参数,分辨率只是其中的一个。这里要介绍的另一个类是DisplayMetrics类,这个类保存的就是屏幕像素相关的内容。在Display的getSize()方法中,也是将DisplayMetrics的关于屏幕像素的宽、高设置于Point中。

//Display
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 通过Activity类中的getWindowManager()方法获取窗口管理,再调用getDefaultDisplay()方法获取Display对象
        Display display = getWindowManager().getDefaultDisplay();

        Point outSize = new Point();
        display.getSize(outSize);
        int x = outSize.x;
        Toast.makeText(this, "手机像素为:" + x + "x" + y, Toast.LENGTH_LONG).show();
    }
}
//DisplayMetrics
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 声明一个DisplayMetrics对象
        DisplayMetrics metrics = new DisplayMetrics();
        // 获取Manager对象后获取Display对象,然后调用getMetrics()方法
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        // 从DisplayMetrics对象中获取宽、高
        int heightPixels = metrics.heightPixels;
        int widthPixels = metrics.widthPixels;
        // 通过吐司显示屏幕宽、高数据
        Toast.makeText(this, "手机像素为:" + widthPixels + "x" + heightPixels, Toast.LENGTH_LONG).show();
    }
}
发布了12 篇原创文章 · 获赞 50 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览