java auto - Come ottenere altezza e larghezza del dispositivo in fase di runtime?




layout android (6)

Sto sviluppando un'app in cui devo rendere la nostra app adatta per ogni dispositivo, sia per i tablet che per i dispositivi mobili Android. Ora voglio ottenere l'altezza e la larghezza del dispositivo in fase di esecuzione e implementarlo nel mio codice in modo che la mia app funzioni sia in orizzontale che in verticale.

Il mio file XML è:

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

Il mio file Java è:

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

    }


    }

Answers

Non ho intenzione di dirti come ottenere le dimensioni dello schermo, come tutti gli altri hanno già fatto. Ti sto indicando un link dalla guida per gli sviluppatori di sviluppatori Android, che dovrebbe insegnarti come progettare e sviluppare dispositivi di dimensioni dello schermo diverse.

Dopo aver letto, torna indietro e dicci di nuovo che vuoi ancora ottenere la larghezza e l'altezza dello schermo.


questo è il modo in cui ottieni le dimensioni dello schermo disponibili. Questo non ti porterà alla dimensione dei pixel grezzi ma allo spazio disponibile della tua finestra / attività.

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

Inoltre puoi avere diversi file xml di layout sia per il paesaggio che per il ritratto. Metti il ​​tuo xml per ritratto in res / layout-port. Layout per il paesaggio può essere messo in res / layout-land. Dovresti leggere come Android gestisce le resources


Nel onCreate della tua attività puoi farlo

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

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

e in seguito utilizzare queste variabili per accedere all'altezza e alla larghezza del dispositivo


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

In questo modo puoi ottenere le dimensioni dello schermo.

Poiché questa API è stata sottratta nelle nuove versioni dell'SDK, puoi utilizzarla.

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

Puoi ottenere tutte le informazioni relative allo schermo utilizzando la classe Display Metrics http://developer.android.com/reference/android/util/DisplayMetrics.html

avresti bisogno

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

Dopodiché tutte le informazioni richieste saranno presenti nel tuo oggetto metriche.

L'altra opzione è chiamare

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

Ho avuto tempi di caricamento intermittenti dell'emulatore lento (SDK v8.0), fino a tre minuti su CPU Intel Core i7 920 2.67 GHz in esecuzione su Xubuntu 10.04 VirtualBox 3.2.12 guest con Eclipse (3.6.1) caricato. Ho cambiato la memoria del guest VirtualBox da 1024 MB a 2048 MB e da quel momento in poi, non ho mai più sperimentato la lentezza (tempi di caricamento costanti a 33 secondi, carico della CPU costante al 20%). Sia Eclipse che l'emulatore sono maiali di memoria.







java android android-layout android-intent android-emulator