Вопрос по android-emulator, android-layout, java, android – Как получить высоту и ширину устройства во время выполнения?

29

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

Мой XML-файл:

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

Мой файл Java:

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

    }


    }
</code>
это поможет тебе. [ссылка] [1] [1]: / Stackoverflow.com вопросы / 1016896 / ... Noundla Sandeep
ты должен принять ансер stinepike
/ Stackoverflow.com вопросы / 2902640 / ... Проверь это. RobinHood

Ваш Ответ

6   ответов
10

В процессе создания своей деятельности вы можете делать

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

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

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

Тогда как мне использовать его в коде ?? user1271118
Если я могу быть откровенным, этот вопрос не имеет смысла. Вы хотели ценности. для чего вы хотите его использовать? josephus
3

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

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

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

70
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;
Отображение getWidth и getHeight устарели. emrahgunduz
getWidth () и getHeight () устарели на уровне API 13. Вместо этого используйте Display.getSize () следующим образом,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; } Возвращенные значения в пикселях. luckylukein
2

связанную с отображением, используя класс Display Metricshttp: //developer.android.com/reference/android/util/DisplayMetrics.htm

тебе понадобится

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

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

Другой вариант - позвонить

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

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

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

23

В области действия сделайте:

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

Похожие вопросы