タブレットとAndroidモバイルの両方)のすべてのデバイスに合わせてアプリを作成する必要があるアプリを開発しています。今、実行時にデバイスの高さと幅を取得して実装したいです。私のアプリが横向きと縦向きの両方で動作するように、コード内で。
私の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>
My 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
}
}
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;
アクティビティスコープで行うこと:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int w = dm.widthPixels; // etc...
アクティビティのonCreateでできること
mScreenWidth = getActivity().getWindowManager().getDefaultDisplay().getWidth();
mScreenHeight = getActivity().getWindowManager().getDefaultDisplay().getHeight();
後でこれらの変数を使用して、デバイスの高さと幅にアクセスします
これは、使用可能な画面サイズを取得する方法です。これにより、生のピクセルサイズではなく、ウィンドウ/アクティビティの利用可能なスペースが得られます。
Point outSize = new Point();
getWindowManager().getDefaultDisplay().getSize(outSize);
また、横向きと縦向きの両方に異なるレイアウトxmlファイルを使用できます。 res/layout-portにポートレート用のxmlを配置します。ランドスケープのレイアウトは、res/layout-landに配置できます。 Androidの処理方法 resources
クラス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()
ここで他の誰もがすでに行っているように、画面の大きさを取得する方法を説明するつもりはありません。 Android developer dev guideの link を指しています。これは、さまざまな画面サイズのデバイス向けに設計および開発する方法を教えてくれるはずです。
読んだ後、画面の幅と高さを取得したいということをもう一度教えてください。