Je développe une application dans laquelle je dois adapter notre application à chaque appareil - pour tablette et Android mobiles. Maintenant, je veux obtenir la hauteur et la largeur de l'appareil au moment de l'exécution et l'implémenter dans mon code afin que mon application fonctionne à la fois pour le paysage et le portrait.
Mon fichier XML est:
<?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>
Mon fichier Java est:
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();
De cette façon, vous pouvez obtenir la taille de l'écran.
Étant donné que cette API est déconseillée dans les nouvelles versions du SDK, vous pouvez l'utiliser.
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
Dans un domaine d'activité, procédez comme suit:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int w = dm.widthPixels; // etc...
Dans la création de votre activité, vous pouvez faire
mScreenWidth = getActivity().getWindowManager().getDefaultDisplay().getWidth();
mScreenHeight = getActivity().getWindowManager().getDefaultDisplay().getHeight();
puis utiliser ces variables pour accéder à la hauteur et à la largeur de l'appareil
c'est ainsi que vous obtenez les dimensions d'écran disponibles. Cela vous donnera non pas la taille brute des pixels mais l'espace disponible de votre fenêtre/activité.
Point outSize = new Point();
getWindowManager().getDefaultDisplay().getSize(outSize);
Vous pouvez également avoir des fichiers xml de mise en page différents pour le paysage et le portrait. Mettez votre xml pour portrait dans res/layout-port. La mise en page pour le paysage peut être mise dans res/layout-land. Vous devriez lire comment Android gère ressources
Vous pouvez obtenir toutes les informations relatives à l'affichage à l'aide de la classe Display Metrics http://developer.Android.com/reference/Android/util/DisplayMetrics.html
vous auriez besoin
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Après cela, toutes les informations requises seront présentes dans votre objet de métriques.
L'autre option est d'appeler
getActivity().getWindowManager().getDefaultDisplay().getWidth()
getActivity().getWindowManager().getDefaultDisplay().getHeight()
Je ne vais pas vous dire comment obtenir les dimensions de l'écran, comme tout le monde ici l'a déjà fait. Je vous signale un lien du Android développeur dev guide, qui devrait vous apprendre à concevoir et à développer pour des appareils de différentes tailles d'écran.
Après la lecture, revenez et dites-nous encore que vous voulez toujours avoir la largeur et la hauteur de l'écran.