如何在运行时获取设备高度和宽度?
Posted
技术标签:
【中文标题】如何在运行时获取设备高度和宽度?【英文标题】:How to Get Device Height and Width at Runtime? 【发布时间】:2012-04-27 16:42:39 【问题描述】:我正在开发一个应用程序,我必须使我们的应用程序适合各种设备 - 平板电脑和安卓手机。现在我想在运行时获取设备的高度和宽度,并在我的代码中实现它,以便我的应用程序适用于横向和纵向。
我的 XML 文件是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:layout_weight="2" android:orientation="vertical">
<LinearLayout android:id="@+id/linearLayout1" android:layout_
android:orientation="horizontal" android:layout_
android:layout_weight="1">
<LinearLayout android:id="@+id/linearLayout1" android:layout_
android:orientation="vertical" android:layout_
android:layout_weight="1" android:weightSum="100">
<TextView android:id="@+id/letter1" android:gravity="center" android:layout_ android:layout_ android:layout_weight="60"></TextView>
<TextView android:id="@+id/letter2" android:gravity="center" android:layout_ android:layout_ android:layout_weight="20"></TextView>
<TextView android:id="@+id/letter3" android:gravity="center" android:layout_ android:layout_ android:layout_weight="20"></TextView>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout1" android:layout_
android:gravity="center"
android:orientation="horizontal" android:layout_
android:layout_weight="1">
<ImageView android:id="@+id/imag"
android:gravity="center"
android:scaleType = "fitCenter"
android:layout_
android:layout_
android:layout_gravity="center">
</ImageView>
</LinearLayout>
</LinearLayout>
<LinearLayout android:layout_gravity="bottom"
android:id="@+id/linearLayout2"
android:layout_ android:orientation="horizontal" android:layout_>
<Button android:id="@+id/previous" android:layout_ android:layout_weight="1" android:text="Previous" android:layout_ ></Button>
<Button android:id="@+id/practice" android:layout_ android:layout_weight="1" android:text="Practice" android:layout_ android:onClick="onClick"></Button>
<Button android:id="@+id/home" android:layout_ android:layout_weight="1" android:text="Home" android:layout_></Button>
<Button android:id="@+id/spell" android:layout_ android:layout_weight="1" android:text="Spell" android:layout_ android:onClick="Content"></Button>
<Button android:id="@+id/next" android:layout_ android:layout_weight="1" android:text="Next" android:layout_ 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
【问题讨论】:
***.com/questions/2902640/… 看看这个.. 这将对您有所帮助。 [链接][1] [1]:***.com/questions/1016896/… 你应该接受分析器 【参考方案1】: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;
【讨论】:
Display 的 getWidth 和 getHeight 已弃用。 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;
返回的值以像素为单位。【参考方案2】:
在 Activity 范围内做:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int w = dm.widthPixels; // etc...
【讨论】:
【参考方案3】:在你的活动的onCreate中你可以做
mScreenWidth = getActivity().getWindowManager().getDefaultDisplay().getWidth();
mScreenHeight = getActivity().getWindowManager().getDefaultDisplay().getHeight();
以后使用这些变量来访问设备的高度和宽度
【讨论】:
如果我可以坦率地说,这个问题毫无意义。你想要的价值观。你想用它做什么?【参考方案4】:这是您获取可用屏幕尺寸的方式。这将获得的不是原始像素大小,而是窗口/活动的可用空间。
Point outSize = new Point();
getWindowManager().getDefaultDisplay().getSize(outSize);
您还可以为横向和纵向设置不同的布局 xml 文件。 将您的 xml 肖像放在 res/layout-port 中。横向布局可以放入 res/layout-land。你应该阅读android如何处理resources
【讨论】:
【参考方案5】:您可以使用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()
【讨论】:
【参考方案6】:我不会告诉你如何获得屏幕尺寸,因为这里的其他人已经这样做了。我将您指向 android 开发者开发指南中的 link,它应该会教您如何针对不同屏幕尺寸的设备进行设计和开发。
看完再回来告诉我们,你还是要获取屏幕的宽高。
【讨论】:
以上是关于如何在运行时获取设备高度和宽度?的主要内容,如果未能解决你的问题,请参考以下文章