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

    在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();
        }
    }
    展开全文
  • Android 获取屏幕像素的方法

    千次阅读 2015-07-20 18:43:41
    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸。 下面的代码即可获取屏幕的尺寸。在一个Activity的onCreate方法中,写入如下...

    我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸。


    下面的代码即可获取屏幕的尺寸。在一个Activity的onCreate方法中,写入如下代码:

            DisplayMetrics metric = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(metric);        int width = metric.widthPixels;     // 屏幕宽度(像素)        int height = metric.heightPixels;   // 屏幕高度(像素)        float density = metric.density;      // 屏幕密度(0.75 / 1.0 / 1.5)        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)

        但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。因此,研究之后发现,若没有设定多分辨率支持的话,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,具体的内容如下:

            <supports-screens            android:smallScreens="true"            android:normalScreens="true"            android:largeScreens="true"            android:resizeable="true"            android:anyDensity="true" /> 

       这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。
    展开全文
  • 随着Android厂商对系统的不断定制,Android出现越来越多不同尺寸的手机,由于尺寸和分辨率等不同,从而导致Android的适配成为一个老大难的问题,今天我们就来聊聊Android中的屏幕尺寸。 我们先了解一下几个重要的...

    转载:    https://blog.csdn.net/dongxianfei/article/details/73476844
    1、重要概念
    随着Android厂商对系统的不断定制,Android出现越来越多不同尺寸的手机,由于尺寸和分辨率等不同,从而导致Android的适配成为一个老大难的问题,今天我们就来聊聊Android中的屏幕尺寸。

    我们先了解一下几个重要的概念:

    什么是屏幕尺寸、屏幕分辨率、屏幕像素密度? 
    什么是dp、dip、dpi、sp、px?他们之间的关系是什么? 
    什么是mdpi、hdpi、xdpi、xxdpi?如何计算和区分?

    (1)屏幕尺寸
    屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米,

    比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等。

    (2)屏幕分辨率
    屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。

    (3)屏幕像素密度
    屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

    (4)dp、dip、dpi、sp、px
    (1)px我们应该是比较熟悉的,前面的分辨率就是用的像素为单位,大多数情况下,比如UI设计、Android原生API都会以px作为统一的计量单位,像是获取屏幕宽高等。

    (2)dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素,上面我们说过,dpi是屏幕像素密度,假如一英寸里面有160个像素,这个屏幕的像素密度就是160dpi,那么在这种情况下,dp和px如何换算呢?在Android中,规定以160dpi为基准(320*480),1dip=1px,如果密度是320dpi,则1dip=2px,以此类推,关系式:px = dp * (dpi / 160)。

    假如同样都是画一条320px的线,在480*800分辨率手机上显示为2/3屏幕宽度,在320*480的手机上则占满了全屏,如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。这也是为什么在Android开发中,写布局的时候要尽量使用dp而不是px的原因。

    (3)而sp,即scale-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。

    (5)ldpi、mdpi、hdpi、xdpi、xxdpi、xxxdpi
    我们先来看两张不同dpi对应的大致分辨率。

    è¿éåå¾çæè¿°

    è¿éåå¾çæè¿°

    其中: 
    ldpi:mdpi:hdpi:xhdpi:xxhdpi:xxxdpi = 0.75:1:1.5:2:3:4 = 3:4:6:8:12:16

    这个比值乘以12就得到对应屏幕密度手机桌面icon图标大小。

    2、部分Android测试机分析
    先看两个计算公式: 
    (1)dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 
    (2)px = dp * (dpi / 160)

    在项目开发过程中,遇到屏幕很大的手机,结果显示的图标却很小,和预期不一致,例如华为机型MT1-U06。 
    原因是:真机屏幕的dpi会取和谷歌标准最相近的标准dpi,然后density按照最相近的dpi来定。

    部分机型屏幕尺寸、分辨率计算:

    (1)一加A1001 ,主屏尺寸:5.5英寸,1920×1080像素,测试为xxdpi:

    dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 = √(1920² + 1080²) / 5.5 =√ 3686400 + 1166400 /5.5 = √ 4852800 /5.5 = 2202.9 /5.5 =440.6 
    density = dpi/160 = 440.6/160 = 2.75 
    就近原则,对应dpi为xxdpi,与测试结果一致。

    (2)Nexus 5,屏幕尺寸:4.95英寸,分辨率是1920×1080像素(FHD),测试为xxdpi :

    dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 =2202.9 /4.95 =445 
    density = dpi/160 = 445/160 = 2.78 
    同理,就近原则,对应dpi为xxdpi,与测试结果一致。

    (3)华为MT1-U06,屏幕:6.1英寸(机身尺寸:64.8*129*7.69mm),像素1280×720px,对应hdpi:

    dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 = √(1280² + 720²) / 6.1 =√ 1638400 + 518400 /6.1 = √ 2156800 /6.1 = 1468.6 /6.1 =240.75 
    density = dpi/160 = 240.75 /160 = 1.5 
    这个数值,刚刚好是hdpi。

    (4)三星galaxy s4 ,主屏:5英寸,1920x1080像素,xxdpi:

    dpi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数 =2202.9 /5 =440.6 
    density = dpi/160 = 440.6/160 = 2.75 
    同理,就近原则,对应dpi为xxdpi,与测试结果一致。

    这就说明了之前为什么屏幕大,但是图标很小的情况了。
    --------------------- 
    作者:雪舞飞影 
    来源:CSDN 
    原文:https://blog.csdn.net/dongxianfei/article/details/73476844 
     

    展开全文
  • 相信看到此博客时候,大多人已经看了许多获取屏幕像素的博客,从其他博客我们知道 屏幕的像素是根据DisplayMetrics类来获取的 具体的计算方法是 width = widthPixels * density; height = heightPixels * density ...

    相信看到此博客时候,大多人已经看了许多获取屏幕像素的博客,从其他博客我们知道 屏幕的像素是根据DisplayMetrics类来获取的

    具体的计算方法是 width = widthPixels * density; height = heightPixels * density (ps: widthPixels 和 heightPixels ,density 都是从DisplayMetrics中获取的)。

     

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int widthPixels= dm.widthPixels;
    int heightPixels= dm.heightPixels;
    float density = dm.density;
    int screenWidth = widthPixels * density ;
    int screenHeight = heightPixels * density ;

     

     

     

    在320*480 的phone 上的 到的 widthPixels 值是320, heightPixels 值是480, density 的值是1.0。

    在480*800 的phone 上的到的idthPixels 值是320, heightPixels 值是533, density 的值是1.5。

    注意: 此处DisplayMetrics 不要使用context.getApplicationContext().getResources().getDisplayMetrics();

     

    我用此方法在nexus one 中测试的时候得到的 density 的值是1.0 ,以至于我得不到正确的480 * 800 的像素。





         本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/818163,如需转载请自行联系原作者

    展开全文
  • Android 获取屏幕尺寸与密度

    万次阅读 多人点赞 2014-01-13 13:46:48
    android中获取屏幕的长于宽,参考了网上有很多代码,但结果与实际不符,如我的手机是i9000,屏幕大小是480*800px,得到的结果却为320*533结果很不靠谱,于是自己写了几行代码,亲测一下测试参数:测试环境: i9000...
  • Android开发 屏幕适配之像素密度适配

    万次阅读 2016-01-29 22:37:54
    由于市场上采用Android系统的设备种类繁多,迫使Andriod开发人员不得不做烦人的适配工作。 适配工作包括对安装不同Android版本的设备进行适配,对不同屏幕的设备进行适配等。 而屏幕适配又包括: 屏幕尺寸(small,...
  • Android屏幕适配之–自定义像素的缩放比例来实现屏幕适配 在Android的适配中,可以采用自定义布局的形式,来通过计算像素的缩放比例来实现适配。大致思路就是,通过拿到设备实际的长宽像素值来除以参考设备的长宽值...
  • public void getScreen(){ // 通过Activity类中的getWindowManager()方法获取窗口管理,再调用getDefaultDisplay()方法获 取获取Display对象 Display display = getWindowManager().getDefaultDisplay();...
  • Android屏幕适配全攻略(最权威的官方适配指导)

    万次阅读 多人点赞 2015-10-29 14:37:36
    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因、重要概念、解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的...
  • //获取屏幕的宽度 public static int getScreenWidth(Context context){ //从系统服务中获取窗口管理器 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMe...
  • Android 手机屏幕分辨率

    千次阅读 2018-03-07 21:05:59
    屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米(下面有图文介绍)比如常见的屏幕尺寸有2.4、2.8...屏幕像素密度屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏...
  • Android屏幕尺寸详解

    万次阅读 2017-06-20 14:42:06
    1、重要概念 随着Android厂商对系统的不断定制,Android出现越来越多不同尺寸的手机,...什么是屏幕尺寸、屏幕分辨率、屏幕像素密度? 什么是dp、dip、dpi、sp、px?他们之间的关系是什么? 什么是mdpi、hdpi、xd
  • Android屏幕适配之–通过修改系统的屏幕像素比来实现屏幕的适配效果 关于Android中dip,dpi,density,px的详细解释参考简书前辈的文章Android开发中dip,dpi,density,px等详解 当然在下面的代码中,density代表的是...
  • 讲到像素密度,我们先要搞明白什么是像素密度,像素密度的字面上的意思为手机屏幕上一定尺寸区域内像素的个数。在Android开发中, 我们一般会使用每英寸像素密度(dpi)这样一个单位来表示手机屏幕像素密度,dpi...
  • android获取屏幕像素密度DPI,与density

    万次阅读 2016-04-08 09:48:40
    dip : Density independent pixels ,设备无关像素。 dp :就是dip dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。我一般称作像素密度,简称密度 density : 直接翻译的话貌似...
  • Android获取屏幕的宽度和高度(dp)

    万次阅读 2014-03-29 17:09:22
    一般我们需要的宽度和高度都是需要dp格式,但是在网上找了一大堆的资料基本上得到的宽度和高度都是像素(Pixels)型的宽度和高度,与我们所需要的不一样,后面经过查找资料终于找到解决办法,下面上代码,老鸟勿喷 ...
  • 最近正在做Android的UI设计,故搜集了一些Android上进行UI设计的一些资料,现和各位分享下。首先说说density,density值表示每英寸有多少个显示点,与分辨率是两个不同的概念。Android主要有以下几种屏:QVGA和WQVGA...
  • Android支持的像素有:px(像素),in(英寸),mm(毫米),pt(磅,1/72英寸),dp(与设备无关的显示单位),dip(等价dp),sp(用来设置字体大小)。px,dp,sp是最常用的。 px 是手机屏幕上可显示最小单位,与物理设备...
1 2 3 4 5 ... 20
收藏数 25,161
精华内容 10,064
关键字:

得到android屏幕像素