28

Я разрабатываю приложение, в котором я должен сделать наше приложение подходящим для каждого устройства - для мобильных телефонов с планшетом и Android. Теперь я хочу получить высоту и ширину устройства во время выполнения и реализовать его в своем коде, чтобы мое приложение работало как для пейзажа, так и для портрета.Как получить высоту и ширину устройства в Runtime?

Мой файл 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> 

Мой файл 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 

    } 


    } 
+0

http://stackoverflow.com/questions/2902640/android-get-the-screen-resolution-pixels-as-integer-values ​​проверить это .. – RobinHood

+1

это поможет u. [link] [1] [1]: http: // stackoverflow.com/questions/1016896/android-how-to-get-screen-dimensions – Noundla

+3

yoou должен принять anser – stinepike

ответ

10

В OnCreate вашей деятельности вы можете сделать

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

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

, а затем использовать эти переменные высота и ширина устройства доступа

+0

Тогда как я должен использовать его в коде ?? – user1271118

+3

если я могу быть откровенным здесь, этот вопрос не имеет смысла. вам нужны значения. для чего вы хотите его использовать? – josephus

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

Таким образом, вы можете получить размер экрана.

Поскольку этот API лишен новых версий SDK, вы можете использовать это.

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

Показать getWidth и getHeight устарели. – emrahgunduz

+2

getWidth() и getHeight() устарели на уровне API 13. Вместо этого используйте Display.getSize(), как это, 'Display display = getWindowManager(). GetDefaultDisplay(); Точка размера = новая точка(); if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.JELLY_BEAN_MR1) { display.getSize (размер); int width = size.x; int height = size.y; } ' Возвращаемые значения находятся в пикселях. – luckylukein

22

В рамках деятельности сделать:

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

это, как вы получите доступные размеры экрана. Это даст вам не размер необработанного пикселя, а доступное пространство вашего окна/активности.

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

Также у вас могут быть разные макеты xml-файлов для пейзажа и портрета. Поместите свой xml для портрета в res/layout-port. Макет для пейзажа может быть помещен в res/layout-land. Вы должны прочитать, как андроид ручки resources

2

Вы можете получить все отображения информации, связанной с использованием класса Display Metrics http://developer.android.com/reference/android/util/DisplayMetrics.html

вам потребуется

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

После этого вся необходимая информация будет присутствовать в вашем объекте метрики.

Другой вариант заключается в вызове

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

Я не собираюсь рассказывать вам, как получить размеры экрана, как и все остальные здесь сделали это уже. Я укажу вас на link из руководства разработчика разработчика Android, которое должно научить вас, как проектировать и разрабатывать устройства разных размеров экрана.

После прочтения вернитесь и скажите нам еще раз, что вы все еще хотите получить ширину и высоту экрана.

Смежные вопросы