Gaukite ekrano dydžius pikseliais

Aš sukūriau kai kuriuos pasirinktinius elementus, ir aš noriu programiškai išdėstyti juos viršutiniame dešiniajame kampe ( n pikseliai nuo viršutinio krašto ir m taškų iš dešiniojo krašto). Taigi turiu gauti ekrano plotį ir ekrano aukštį, o tada nustatyti padėtį:

 int px = screenWidth - m; int py = screenHeight - n; 

Kaip pagrindiniame renginyje gauti screenWidth ir screenHeight ?

1569
19 июня '09 в 11:25 2009-06-19 11:25 Niko Gamulin paklausė birželio 19 d., 09:25, 2009-06-19 11:25
@ 35 atsakymai
  • 1
  • 2

Jei norite rodyti matmenis pikseliais, galite naudoti getSize :

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; 

Jei nedalyvaujate Activity , galite gauti numatytąjį WINDOW_SERVICE per WINDOW_SERVICE :

 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); 

Prieš įvedant getSize (API 13 lygiu), galite naudoti getWidth ir getHeight , kurie dabar yra pasenę:

 Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); // deprecated int height = display.getHeight(); // deprecated 

Jei naudosite tai, ką apibūdinate, maketas / užpildymas atrodo labiau tinkamas.

2015 m. Spalio 22 d

Kiti būdai: DisplayMetrics

Struktūra, apibūdinanti bendrą ekrano informaciją, pvz., Šrifto dydį, tankį ir mastelį. Jei norite pasiekti „DisplayMetrics“ elementus, inicijuokite objektą taip:

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

Norėdami gauti informaciją apie:

"Absoliutus ekrano plotis pikseliais."

Pavyzdys:

 Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels); 
3208
19 июня '09 в 11:41 2009-06-19 11:41 atsakė Josefui Pflegeriui birželio 19 d., 09:41, 2009-06-19 11:41

Vienas iš būdų:

 Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

Tai pasenusi, o vietoj to turėtumėte išbandyti šį kodą. Pirmieji du kodų eilutės suteikia jums „DisplayMetrics“ objektus. Šiuose objektuose yra laukų, tokių kaip heightPixels, widthPixels.

 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; 
336
31 янв. Atsakymą pateikė Balaji.K sausio 31 d 2011-01-31 05:01 '11 at 5:01 2011-01-31 05:01

Jis negali atsakyti į jūsų klausimą, bet būtų naudinga žinoti (aš pats ieškojau, kai atėjau į šį klausimą), jei jums reikia peržiūros matmens, bet jūsų kodas vykdomas, kai jo išdėstymas nebuvo (pvz., „ onCreate() ) galite nustatyti „ ViewTreeObserver.OnGlobalLayoutListener su „ View.getViewTreeObserver().addOnGlobalLayoutListener() atitinkamą kodą, kuriam norite matuoti vaizdą. Atkūrimo klausytojas bus iškviestas, kai išdėstymas bus išdėstytas.

107
07 апр. Francesco Feltrinelli atsakymas 07 Bal 2011-04-07 00:23 '11 prie 0:23 2011-04-07 00:23

(2012 m. Atsakas gali būti pasenęs). Jei norite palaikyti priešparnį, prieš API 13 turėsite įdiegti atgalinį suderinamumą.

 int measuredWidth = 0; int measuredHeight = 0; WindowManager w = getWindowManager(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { Point size = new Point(); w.getDefaultDisplay().getSize(size); measuredWidth = size.x; measuredHeight = size.y; } else { Display d = w.getDefaultDisplay(); measuredWidth = d.getWidth(); measuredHeight = d.getHeight(); } 

Žinoma, pasenę metodai galiausiai bus gaunami iš naujausių SDK, tačiau tol, kol mes vis dar pasikliauksime dauguma mūsų naudotojų su „Android 2.1“, „2.2“ ir „2.3“, tai mes paliekame.

102
24 июля '12 в 6:14 2012-07-24 06:14 atsakymas pateikiamas „ Digiphd“ liepos 24 d., 12 val

Aš bandžiau visus galimus „sprendimus“ be sėkmės, ir pastebėjau, kad „Elliott Hughes Dalvik Explorer“ programa visada rodo teisingą matavimą bet kurioje „Android“ / OS versijoje. Galiausiai apžvelgiau jo atviro kodo projektą, kurį galima rasti čia: https://code.google.com/p/enh/

Čia yra visas atitinkamas kodas:

 WindowManager w = activity.getWindowManager(); Display d = w.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); d.getMetrics(metrics); // since SDK_INT = 1; widthPixels = metrics.widthPixels; heightPixels = metrics.heightPixels; try { // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar) widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d); heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d); } catch (Exception ignored) { } try { // used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar) Point realSize = new Point(); Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize); widthPixels = realSize.x; heightPixels = realSize.y; } catch (Exception ignored) { } 

EDIT: šiek tiek patobulinta versija (venkite išimčių, susijusių su versijos, kuriai nepalaiko OS, pašalinimas):

 WindowManager w = activity.getWindowManager(); Display d = w.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); d.getMetrics(metrics); // since SDK_INT = 1; widthPixels = metrics.widthPixels; heightPixels = metrics.heightPixels; // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 14  Build.VERSION.SDK_INT < 17) try { widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d); heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d); } catch (Exception ignored) { } // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 17) try { Point realSize = new Point(); Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize); widthPixels = realSize.x; heightPixels = realSize.y; } catch (Exception ignored) { } 
60
29 марта '13 в 11:15 2013-03-29 11:15 atsakymą pateikė Dragan Marjanović kovo 29 d., 13 val. 11:15 2013-03-29 11:15

Jei norite pasiekti „Android“ įrenginių būsenos juostos aukštį, mes norėtume, kad jis būtų programinis būdas:

Kodo pavyzdys

 int resId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resId > 0) { result = getResources().getDimensionPixelSize(resId); } 

Kintamas result suteikia aukštį pikseliu.

Norėdami greitai pasiekti

2019

40
27 авг. Atsakymas, kurį pateikė Swapnil Sonar 27 rug. 2013-08-27 16:12 '13, 16:12 2013-08-27 16:12

Lengviausias būdas:

  int screenHeight = getResources().getDisplayMetrics().heightPixels; int screenWidth = getResources().getDisplayMetrics().widthPixels; 
39
26 нояб. atsakymas pateikiamas Zelleriation 26 lapkričio. 2014-11-26 13:47 '14, 13:47 2014-11-26 13:47

Pirmiausia peržiūrėkite vaizdą (pvz., findViewById() ), tada galite peržiūrėti getWidth (), kad galėtumėte peržiūrėti save.

24
19 июня '09 в 11:38 2009-06-19 11:38 atsakymą pateikė Marcin Gil , birželio 19 d., 09:38, 2009-06-19 11:38

Turiu dvi funkcijas: vieną siuntimo kontekstui ir kitą aukštį ir plotį pikseliais:

 public static int getWidth(Context mContext){ int width=0; WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); if(Build.VERSION.SDK_INT>12){ Point size = new Point(); display.getSize(size); width = size.x; } else{ width = display.getWidth(); // Deprecated } return width; } 

ir

 public static int getHeight(Context mContext){ int height=0; WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); if(Build.VERSION.SDK_INT>12){ Point size = new Point(); display.getSize(size); height = size.y; } else{ height = display.getHeight(); // Deprecated } return height; } 
22
17 окт. Jorgesio atsakymas, spalio 17 d 2012-10-17 17:44 '12, 17:44, 2012-10-17 17:44

Ar ne tai geriausias sprendimas? „DisplayMetrics“ ateina su viskuo, ko jums reikia ir veikia su API 1.

 public void getScreenInfo(){ DisplayMetrics metrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); heightPixels = metrics.heightPixels; widthPixels = metrics.widthPixels; density = metrics.density; densityDpi = metrics.densityDpi; } 

Taip pat galite gauti faktinį ekraną (įskaitant ekrano dekoderius, pvz., Būsenos juostą arba programinės įrangos navigacijos srityje) naudodami getRealMetrics , tačiau tai veikia tik su 17+.

Ar kažką praleidau?

16
12 мая '13 в 23:16 2013-05-12 23:16 atsakė David Corsalini gegužės 12 d., 13 val. 11:16 val. 2013-05-12 23:16

Tai kodas, kurį naudoju užduočiai:

 // `activity` is an instance of Activity class. Display display = activity.getWindowManager().getDefaultDisplay(); Point screen = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { display.getSize(screen); } else { screen.x = display.getWidth(); screen.y = display.getHeight(); } 

Jis atrodo pakankamai švarus ir vis dėlto rūpinasi pasenimu.

16
27 дек. Atsakymą pateikė Pijusn, gruodžio 27 d. 2012-12-27 17:31 '12 at 17:31 pm 2012-12-27 17:31

Dinaminiam mastelio keitimui naudojant XML yra atributas „android: layout_weight“

Toliau pateiktame pavyzdyje, modifikuotame iš sinchroninio atsako į šį srautą , rodomas mygtukas, kuris užima 75% ekrano (svoris = .25) ir teksto rodinys užima likusius 25% ekrano (svoris = .75).

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight=".25" android:text="somebutton"> <TextView android:layout_width="fill_parent" android:layout_height="Wrap_content" android:layout_weight=".75"> </LinearLayout> 
16
22 дек. Atsakymą pateikė Crbreingan gruodžio 22 d 2011-12-22 09:11 '11 at 9:11 2011-12-22 09:11

Tiesiog pridėkite prie Francesco atsakymo. Kitas stebėtojas, tinkamesnis, jei norite sužinoti vietą >ViewTreeObserver.OnPreDrawListener ()

Jis taip pat gali būti naudojamas ieškoti kitų atvaizdų atributų, kurie daugeliu atvejų nežinomi onCreate (), pavyzdžiui,. slenkama padėtis, mastelio padėtis.

14
16 марта '12 в 10:15 2012-03-16 10:15 atsakymas pateikiamas pellucide kovo 16 d. 12 val. 10:15 2012-03-16 10:15

Rasti ekrano plotį ir aukštį:

 width = getWindowManager().getDefaultDisplay().getWidth(); height = getWindowManager().getDefaultDisplay().getHeight(); 

Naudodami tai galime gauti naujausią ir aukštesnę SDK 13.

 // New width and height int version = android.os.Build.VERSION.SDK_INT; Log.i("", " name == "+ version); Display display = getWindowManager().getDefaultDisplay(); int width; if (version >= 13) { Point size = new Point(); display.getSize(size); width = size.x; Log.i("width", "if =>" +width); } else { width = display.getWidth(); Log.i("width", "else =>" +width); } 
14
18 июня '12 в 7:42 2012-06-18 07:42 atsakymą pateikė „ NagarjunaReddy “ birželio 12 d., 12:42 2012-06-18 07:42

Naudojant šį veiksmą veikloje.

 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int wwidth = metrics.widthPixels; 
13
19 марта '12 в 17:58 2012-03-19 17:58 atsakymą pateikė Vinothkumar Arputharaj, kovo 19 d., 12 val., 17:58, 2012-03-19 17:58
 DisplayMetrics dimension = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dimension); int w = dimension.widthPixels; int h = dimension.heightPixels; 
13
18 дек. Atsakymą pateikė Cristiana214 18 d. 2013-12-18 13:30 '13 13:30 2013-12-18 13:30

Reikia pasakyti, kad jei nesate Activity , bet „ View (arba jūsų vietovėje yra „ View tipo kintamasis), nereikia naudoti „ WINDOW_SERVICE . Tada galite naudoti bent du metodus.

Pirma:

 DisplayMetrics dm = yourView.getContext().getResources().getDisplayMetrics(); 

Antra:

 DisplayMetrics dm = new DisplayMetrics(); yourView.getDisplay().getMetrics(dm); 

Visi šie metodai, kuriuos čia vadiname, nėra pasenę.

11
16 марта '13 в 5:21 2013-03-16 05:21 atsakymą pateikė Sergejus Pikalevas kovo 13 d., 13 val., 2013-03-16 05:21
 public class AndroidScreenActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); String str_ScreenSize = "The Android Screen is: " + dm.widthPixels + " x " + dm.heightPixels; TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize); mScreenSize.setText(str_ScreenSize); } } 
10
27 июня '12 в 15:18 2012-06-27 15:18 atsakymą pateikė Shoaib Ahmed Khan , birželio 27 d., 12 val. 15:18 2012-06-27 15:18

Radau tai padaryti triuką.

 Rect dim = new Rect(); getWindowVisibleDisplayFrame(dim); 
10
06 янв. atsakymą pateikė Justin 06 06 2012-01-06 22:35 '12, 10:35 val. 2012-01-06 22:35

Tai nėra atsakymas į OP, nes jis norėjo rodyti matmenis realiu pikseliu. Man reikia „įrenginio nepriklausomų pikselių“ matmenų, o atsakymai iš čia yra ngn-wiki.ru.site/questions/2415 / ... ir čia ngn-wiki.ru.site/questions/2416 / ...

  DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics(); int dpHeight = (int)(displayMetrics.heightPixels / displayMetrics.density + 0.5); int dpWidth = (int)(displayMetrics.widthPixels / displayMetrics.density + 0.5); 
8
17 авг. RenniePet rugpjūčio 17 d. Atsakymas 2013-08-17 00:44 '13 0:44 2013-08-17 00:44

Nėra pasenusio būdo tai padaryti naudojant „DisplayMetrics“ (API 1), kuri vengia bandymo / sugavimo „mess“:

  // initialize the DisplayMetrics object DisplayMetrics deviceDisplayMetrics = new DisplayMetrics(); // populate the DisplayMetrics object with the display characteristics getWindowManager().getDefaultDisplay().getMetrics(deviceDisplayMetrics); // get the width and height screenWidth = deviceDisplayMetrics.widthPixels; screenHeight = deviceDisplayMetrics.heightPixels; 
7
19 дек. Atsakymas duotas paulrehkugler 19 dec. 2012-12-19 17:39 '12 at 17:39 pm 2012-12-19 17:39

„GetSize“ kodą įvesčiau taip:

 @SuppressLint("NewApi") public static Point getScreenSize(Activity a) { Point size = new Point(); Display d = a.getWindowManager().getDefaultDisplay(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { d.getSize(size); } else { size.x = d.getWidth(); size.y = d.getHeight(); } return size; } 
7
21 апр. Simon Heinen atsakymas balandžio 21 d 2013-04-21 16:42 '13, 16:42, 2013-04-21 16:42

Vadovaukitės toliau pateiktais metodais:

 public static int getWidthScreen(Context context) { return getDisplayMetrics(context).widthPixels; } public static int getHeightScreen(Context context) { return getDisplayMetrics(context).heightPixels; } private static DisplayMetrics getDisplayMetrics(Context context) { DisplayMetrics displayMetrics = new DisplayMetrics(); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); wm.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics; } 
5
07 нояб. atsakymas pateikiamas sonida 07.11 . 2013-11-07 19:31 '13, 19:31, 2013-11-07 19:31

Pirmiausia įkelkite XML failą ir tada parašykite šį kodą:

 setContentView(R.layout.main); Display display = getWindowManager().getDefaultDisplay(); final int width = (display.getWidth()); final int height = (display.getHeight()); 

Rodykite plotį ir aukštį pagal ekrano skiriamąją gebą.

5
17 дек. Atsakymą pateikė Hemant Chand Dungriyal gruodžio 17 d. 2012-12-17 14:22 „12, 12:22 pm 2012-12-17 14:22

Tiems, kurie ieško ekrano dydžio nenaudodami būsenos juostos ir veiksmų juostos (taip pat ir dėl Swapnil atsakymo):

 DisplayMetrics dm = getResources().getDisplayMetrics(); float screen_w = dm.widthPixels; float screen_h = dm.heightPixels; int resId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resId > 0) { screen_h -= getResources().getDimensionPixelSize(resId); } TypedValue typedValue = new TypedValue(); if(getTheme().resolveAttribute(android.R.attr.actionBarSize, typedValue, true)){ screen_h -= getResources().getDimensionPixelSize(typedValue.resourceId); } 
4
09 сент. Francesco Vadicamo atsakymas rugsėjo 09 d 2013-09-09 12:02 '13, 12:02 2013-09-09 12:02

Yra atvejų, kai reikia žinoti tikslius matmenis, reikalingus išdėstymui, kai yra sukurta, kai veikia. Manau, nusprendžiau tai padaryti.

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startActivityForResult(new Intent(this, Measure.class), 1); // Return without setting the layout, that will be done in onActivityResult. } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { // Probably can never happen, but just in case. if (resultCode == RESULT_CANCELED) { finish(); return; } int width = data.getIntExtra("Width", -1); // Width is now set to the precise available width, and a layout can now be created. ... } } public final class Measure extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create a LinearLayout with a MeasureFrameLayout in it. // Just putting a subclass of LinearLayout in works fine, but to future proof things, I do it this way. LinearLayout linearLayout = new LinearLayout(this); LinearLayout.LayoutParams matchParent = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); MeasureFrameLayout measureFrameLayout = new MeasureFrameLayout(this); measureFrameLayout.setLayoutParams(matchParent); linearLayout.addView(measureFrameLayout); this.addContentView(linearLayout, matchParent); // measureFrameLayout will now request this second activity to finish, sending back the width. } class MeasureFrameLayout extends FrameLayout { boolean finished = false; public MeasureFrameLayout(Context context) { super(context); } @SuppressLint("DrawAllocation") @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (finished) { return; } finished = true; // Send the width back as the result. Intent data = new Intent().putExtra("Width", MeasureSpec.getSize(widthMeasureSpec)); Measure.this.setResult(Activity.RESULT_OK, data); // Tell this activity to finish, so the result is passed back. Measure.this.finish(); } } } 

Jei dėl kokių nors priežasčių nenorite prie „Android“ manifesto įtraukti kitos veiklos, galite tai padaryti taip:

 public class MainActivity extends Activity { static Activity measuringActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); if (extras == null) { extras = new Bundle(); } int width = extras.getInt("Width", -2); if (width == -2) { // First time in, just start another copy of this activity. extras.putInt("Width", -1); startActivityForResult(new Intent(this, MainActivity.class).putExtras(extras), 1); // Return without setting the layout, that will be done in onActivityResult. return; } if (width == -1) { // Second time in, here is where the measurement takes place. // Create a LinearLayout with a MeasureFrameLayout in it. // Just putting a subclass of LinearLayout in works fine, but to future proof things, I do it this way. LinearLayout linearLayout = new LinearLayout(measuringActivity = this); LinearLayout.LayoutParams matchParent = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); MeasureFrameLayout measureFrameLayout = new MeasureFrameLayout(this); measureFrameLayout.setLayoutParams(matchParent); linearLayout.addView(measureFrameLayout); this.addContentView(linearLayout, matchParent); // measureFrameLayout will now request this second activity to finish, sending back the width. } } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { // Probably can never happen, but just in case. if (resultCode == RESULT_CANCELED) { finish(); return; } int width = data.getIntExtra("Width", -3); // Width is now set to the precise available width, and a layout can now be created. ... } class MeasureFrameLayout extends FrameLayout { boolean finished = false; public MeasureFrameLayout(Context context) { super(context); } @SuppressLint("DrawAllocation") @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (finished) { return; } finished = true; // Send the width back as the result. Intent data = new Intent().putExtra("Width", MeasureSpec.getSize(widthMeasureSpec)); MainActivity.measuringActivity.setResult(Activity.RESULT_OK, data); // Tell the (second) activity to finish. MainActivity.measuringActivity.finish(); } } 
4
22 мая '13 в 15:16 2013-05-22 15:16 atsakė Steve'ui Waringui gegužės 13 d. 15:16 2013-05-22 15:16

Jei nenorite, kad „WindowManagers“, „Points“ arba „Display“ viršutinės kainos būtų, galite užfiksuoti aukščiausio „View“ elemento „XML“ aukščio ir pločio atributus, jei jo aukštis ir plotis yra „match_parent“. (Tai tiesa, jei jūsų išdėstymas užima visą ekraną.)

Pvz., Jei jūsų XML pradeda nuo panašaus:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/entireLayout" android:layout_width="match_parent" android:layout_height="match_parent" > 

Tada findViewById(R.id.entireLayout).getWidth() grąžina ekrano plotį ir findViewById(R.id.entireLayout).getHeight() grąžina ekrano aukštį.

4
26 июня '13 в 21:35 2013-06-26 21:35 atsakymą Christinac pateikė birželio 26 d. 13 d. 21:35 2013-06-26 21:35

Naudokite rodiklius, kad gautumėte ekrano dydžius.

 DisplayMetrics displayMetrics = new DisplayMetrics(); if (context != null) WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display defaultDisplay = windowManager.getDefaultDisplay(); defaultDisplay.getRealMetrics(displayMetrics); } 

Gauti aukštį ir plotį pikseliais

 int width =displayMetrics.widthPixels; int height =displayMetrics.heightPixels; 
3
04 сент. atsakymą pateikė Anonimas 04.09. 2017-09-04 14:21 '17 at 14:21 pm 2017-09-04 14:21

Aš turiu „splash screen“ veiklą su „LinearLayout“ kaip šakninį vaizdą, kuris atitinka „match_parent“ savo plotį ir aukštį. Šis kodas yra šio veiksmo onCreate() metode. Aš naudoju šias priemones visuose kituose paraiškos veiksmuose.

 int displayWidth = getRawDisplayWidthPreHoneycomb(); int rawDisplayHeight = getRawDisplayHeightPreHoneycomb(); int usableDisplayHeight = rawDisplayHeight - getStatusBarHeight(); pf.setScreenParameters(displayWidth, usableDisplayHeight); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { LinearLayout myView = (LinearLayout) findViewById(R.id.splash_view); myView.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if (left == 0  top == 0  right == 0  bottom == 0) { return; } int displayWidth = Math.min(right, bottom); int usableDisplayHeight = Math.max(right, bottom); pf.setScreenParameters(displayWidth, usableDisplayHeight); } }); } 

Toliau aprašyti pirmiau aprašyti metodai:

 private int getRawDisplayWidthPreHoneycomb() { WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); DisplayMetrics displayMetrics = new DisplayMetrics(); display.getMetrics(displayMetrics); int widthPixels = displayMetrics.widthPixels; int heightPixels = displayMetrics.heightPixels; return Math.min(widthPixels, heightPixels); } private int getRawDisplayHeightPreHoneycomb() { WindowManager w = getWindowManager(); Display d = w.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); d.getMetrics(metrics); int widthPixels = metrics.widthPixels; int heightPixels = metrics.heightPixels; return Math.max(widthPixels, heightPixels); } public int getStatusBarHeight() { int statusBarHeight = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { statusBarHeight = getResources().getDimensionPixelSize(resourceId); } return statusBarHeight; } 

Tai lemia naudojamo ekrano augimą ir plotį, išskyrus visų tipų juostas (būsenos juostą, naršymo juostą) visoms API versijoms ir įvairių tipų prietaisams (telefonams ir planšetiniams kompiuteriams).

2
02 нояб. Atsakymą pateikė Rutger 02 lapkričio. 2013-11-02 22:55 '13, 10:55 val. 2013-11-02 22:55

Jūs galite gauti aukščio dydį naudodami:

 getResources().getDisplayMetrics().heightPixels; 

ir dydžio plotį naudojant

 getResources().getDisplayMetrics().widthPixels; 
1
09 окт. Atsakymą pateikė Jéwôm '09 oct. 2017-10-09 17:09 '17 17:09 val. 2017-10-09 17:09
  • 1
  • 2