How to Get Device Height and Width at Runtime?

57,041

Solution 1

Display mDisplay = activity.getWindowManager().getDefaultDisplay();
final int width  = mDisplay.getWidth();
final int height = mDisplay.getHeight();

This way you can get the screen size.

Since this API is depricated in the new SDK versions you can use this.

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;

Solution 2

In a Activity scope do:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int w = dm.widthPixels; // etc...

Solution 3

In the onCreate of your activity you can do

mScreenWidth = getActivity().getWindowManager().getDefaultDisplay().getWidth();

mScreenHeight = getActivity().getWindowManager().getDefaultDisplay().getHeight();

and later use these variables to access device height and width

Solution 4

You can get all the display related information using the class Display Metrics http://developer.android.com/reference/android/util/DisplayMetrics.html

you would require

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

After this all the required information will be present in your metrics object.

The other option is to call

getActivity().getWindowManager().getDefaultDisplay().getWidth()
getActivity().getWindowManager().getDefaultDisplay().getHeight()

Solution 5

this is how you get the available screen dimensions. This will get you not the raw pixel size but the available space of your window/activity.

    Point outSize = new Point();
    getWindowManager().getDefaultDisplay().getSize(outSize);

Also you can have different layout xml files for both landscape and portrait. Put your xml for portrait in res/layout-port. Layout for landscape can be put into res/layout-land. You should read up how android handles resources

Share:
57,041
user1271118
Author by

user1271118

Updated on August 13, 2020

Comments

  • user1271118
    user1271118 over 3 years

    I am developing an app in which I have to make our app to fit for every device - for both tablet and android mobiles. Now I want to get the device height and width at runtime and implement it in my code so that my app works for both landscape and portrait.

    My XML file is:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_weight="2" android:orientation="vertical">
    
        <LinearLayout android:id="@+id/linearLayout1" android:layout_height="match_parent" 
        android:orientation="horizontal" android:layout_width="match_parent" 
        android:layout_weight="1">
    
            <LinearLayout android:id="@+id/linearLayout1" android:layout_height="match_parent"  
            android:orientation="vertical" android:layout_width="match_parent" 
             android:layout_weight="1" android:weightSum="100">
                <TextView  android:id="@+id/letter1" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content"  android:layout_weight="60"></TextView>
                <TextView  android:id="@+id/letter2" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content"  android:layout_weight="20"></TextView>
                <TextView  android:id="@+id/letter3" android:gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content"  android:layout_weight="20"></TextView>
            </LinearLayout>
    
            <LinearLayout android:id="@+id/linearLayout1" android:layout_height="match_parent"  
            android:gravity="center"
            android:orientation="horizontal" android:layout_width="match_parent" 
            android:layout_weight="1">
                <ImageView android:id="@+id/imag"  
                android:gravity="center"
                android:scaleType = "fitCenter"
                android:layout_height="fill_parent" 
                android:layout_width="fill_parent"
                 android:layout_gravity="center">
            </ImageView>
    
            </LinearLayout>
    
        </LinearLayout>
    
    
            <LinearLayout android:layout_gravity="bottom" 
            android:id="@+id/linearLayout2" 
            android:layout_height="wrap_content" android:orientation="horizontal" android:layout_width="match_parent">
                <Button android:id="@+id/previous" android:layout_width="wrap_content" android:layout_weight="1" android:text="Previous" android:layout_height="wrap_content" ></Button>
                <Button android:id="@+id/practice" android:layout_width="wrap_content" android:layout_weight="1" android:text="Practice" android:layout_height="wrap_content" android:onClick="onClick"></Button>
                <Button android:id="@+id/home" android:layout_width="wrap_content" android:layout_weight="1" android:text="Home" android:layout_height="wrap_content"></Button>
                <Button android:id="@+id/spell" android:layout_width="wrap_content" android:layout_weight="1" android:text="Spell" android:layout_height="wrap_content" android:onClick="Content"></Button>
                <Button android:id="@+id/next" android:layout_width="wrap_content" android:layout_weight="1" android:text="Next" android:layout_height="wrap_content" android:onClick="Content"></Button>
    
    
            </LinearLayout>
    
    </LinearLayout>
    

    My Java file is:

    package com.android;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Typeface;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.android.SimpleGestureFilter.SimpleGestureListener;
    
    public class MySwara extends Activity implements SimpleGestureListener {
    
    
        private SimpleGestureFilter detector;
        private static int counter=-1;
        private String[] mBtn1 ={"C","D","E","F","G","H","IÄ","J","K","L","M","N","O","CA","CB"};
        private TextView txtLetter;
        private ImageView imgLetter;
    
        private int[] imgArr={R.drawable.w1,R.drawable.w2,R.drawable.w3,R.drawable.w4,R.drawable.w5,R.drawable.w6,R.drawable.w7,R.drawable.w8,R.drawable.w9,R.drawable.w10,R.drawable.w11,R.drawable.w12,
                                R.drawable.w13,R.drawable.w14,R.drawable.w15};
        private TextView txtKannada;
        private String[] mBtn2 = {"CgÀ¸À","DªÉÄ","E°","F±À","GqÀ","Hl","IĶ","J¯É","Kr","LzÀÄ","M¯É","N¯É","OµÀzsÀ",
                "CAUÀr","CB"};
        private String[] mBtn3 = {"ARASA","AME","ILI","ISA","UDA","UTA","RUSHI","ELE","EDI","AIDU","oLE","OLE","AUSHADA",
                "ANGADI","AHA"};
        private TextView txtEnglish;
    
        private int[] mAudio = {R.raw.a,R.raw.b,R.raw.c,R.raw.d,R.raw.e,R.raw.f,R.raw.g,R.raw.h,R.raw.i,R.raw.j,
                R.raw.k,R.raw.l,R.raw.m,R.raw.n,R.raw.o};
        protected MediaPlayer mp;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.content);   
    
                detector = new SimpleGestureFilter(this,this);
                if(counter == -1)
                    counter =getIntent().getExtras().getInt("POSITION");
                Typeface tf = Typeface.createFromAsset(getBaseContext().getAssets(), "fonts/brhknd.ttf");
                txtLetter = (TextView)findViewById(R.id.letter1);
                txtKannada = (TextView)findViewById(R.id.letter2);
                txtEnglish = (TextView)findViewById(R.id.letter3);
                imgLetter = (ImageView)findViewById(R.id.imag);
                txtLetter.setTypeface(tf);      
                txtLetter.setText(mBtn1[counter]);
                //txtLetter.setTextSize(350);
    
                Bitmap bm = BitmapFactory.decodeResource(getResources(), imgArr[counter]);
                imgLetter.setImageBitmap(bm);
    
                txtKannada.setTypeface(tf);
                txtKannada.setText(mBtn2[counter]);
                //txtKannada.setTextSize(100);
    
                txtEnglish.setText(mBtn3[counter]);
                //txtEnglish.setTextSize(50);
    
    
    
                Button btnNext =  (Button)findViewById(R.id.next);
                btnNext.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
    
    
                        if(counter<imgArr.length-1)
                            counter++;
                        changeContent();
                    }
                });
    
                Button mPlay = (Button)findViewById(R.id.spell);
                mPlay.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        mp = MediaPlayer.create(MySwara.this, mAudio[counter]);   
                        mp.start();
    
                    }
                });
    
    
                Button btnPrvs =  (Button)findViewById(R.id.previous);
                btnPrvs.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
    
    
                        if(counter>0)
                            counter--;
                        changeContent();
                    }
                });
    
    
                Button btnPractice = (Button)findViewById(R.id.practice);
                btnPractice.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(MySwara.this,DrawingActivity.class);
                        startActivity(intent);
    
                    }
                });
                Button btnHome = (Button)findViewById(R.id.home);
                btnHome.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(MySwara.this,mainClass.class);
                        startActivity(intent);
    
                    }
                });
        }
    
    
    
        public void changeContent()
        {
    
            txtLetter.setText(mBtn1[counter]);
            txtKannada.setText(mBtn2[counter]);
            txtEnglish.setText(mBtn3[counter]);
            //imgLetter.setBackgroundResource(imgArr[counter]);
            Bitmap bm = BitmapFactory.decodeResource(getResources(), imgArr[counter]);
            imgLetter.setImageBitmap(bm);
    
        }
    
    
    @Override
            public boolean dispatchTouchEvent(MotionEvent me){
              this.detector.onTouchEvent(me);
             return super.dispatchTouchEvent(me);
            }
        @Override
         public void onSwipe(int direction) {
          String str = "";
    
          switch (direction) {
    
          case SimpleGestureFilter.SWIPE_RIGHT : str = "Swipe Right";
    
                                                    if(counter>0)
                                                        counter--;
                                                        changeContent();
                                                   break;
          case SimpleGestureFilter.SWIPE_LEFT :  str = "Swipe Left";
                                                if(counter<imgArr.length-1)
                                                    counter++;
                                                    changeContent();
                                                         break;
    
          }
    
         }
    
    
    
        @Override
        public void onDoubleTap() {
            // TODO Auto-generated method stub
    
        }
    
    
        }
    
  • josephus
    josephus about 12 years
    if i can be frank here, that question makes no sense. you wanted the values. what do you want to use it for?
  • emrahgunduz
    emrahgunduz almost 10 years
    Display's getWidth and getHeight are deprecated.
  • luckylukein
    luckylukein over 8 years
    getWidth() and getHeight() are deprecated in API level 13. Instead use Display.getSize() like this, Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { display.getSize(size); int width = size.x; int height = size.y; } The Values returned are in pixels.