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

来源:互联网 发布:2016淘宝经营技巧 编辑:程序博客网 时间:2024/06/03 17:38

在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中。

//Displaypublic 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();    }}
//DisplayMetricspublic 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();    }}
原创粉丝点击