web-dev-qa-db-fra.com

Comment obtenir la hauteur et la largeur de l'appareil au moment de l'exécution?

Je développe une application dans laquelle je dois adapter notre application à chaque appareil - pour tablette et Android mobiles. Maintenant, je veux obtenir la hauteur et la largeur de l'appareil au moment de l'exécution et l'implémenter dans mon code afin que mon application fonctionne à la fois pour le paysage et le portrait.

Mon fichier XML est:

<?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>

Mon fichier Java est:

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

    }


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

De cette façon, vous pouvez obtenir la taille de l'écran.

Étant donné que cette API est déconseillée dans les nouvelles versions du SDK, vous pouvez l'utiliser.

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

Dans un domaine d'activité, procédez comme suit:

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

Dans la création de votre activité, vous pouvez faire

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

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

puis utiliser ces variables pour accéder à la hauteur et à la largeur de l'appareil

10
potter

c'est ainsi que vous obtenez les dimensions d'écran disponibles. Cela vous donnera non pas la taille brute des pixels mais l'espace disponible de votre fenêtre/activité.

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

Vous pouvez également avoir des fichiers xml de mise en page différents pour le paysage et le portrait. Mettez votre xml pour portrait dans res/layout-port. La mise en page pour le paysage peut être mise dans res/layout-land. Vous devriez lire comment Android gère ressources

3
Renard

Vous pouvez obtenir toutes les informations relatives à l'affichage à l'aide de la classe Display Metrics http://developer.Android.com/reference/Android/util/DisplayMetrics.html

vous auriez besoin

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

Après cela, toutes les informations requises seront présentes dans votre objet de métriques.

L'autre option est d'appeler

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

Je ne vais pas vous dire comment obtenir les dimensions de l'écran, comme tout le monde ici l'a déjà fait. Je vous signale un lien du Android développeur dev guide, qui devrait vous apprendre à concevoir et à développer pour des appareils de différentes tailles d'écran.

Après la lecture, revenez et dites-nous encore que vous voulez toujours avoir la largeur et la hauteur de l'écran.

2
josephus