2017-05-26 2 views
0

Ich habe Karten, die 100dp Breite und 120dp Höhe sind und wenn die App startet, füge ich 3 Karten zu jeder Tabellenzeile hinzu (ich erstelle Anzahl der Tabellenzeilen basierend auf der Gesamtzahl der Karten, die ich möchte) hinzufügen). Am Telefon sieht das gut aus, aber auf Tablets gibt es viel Freiraum, weil die Anzahl der Kinder pro Zeile (in diesem Fall 3) nicht dynamisch ist, um den verfügbaren Bildschirmplatz zu füllen. Das Strecken der Spalten macht natürlich nur die Karten breiter (was imo sehr komisch aussieht). Gibt es einen Weg, wie ich einfach meine Karten zum Layout hinzufügen kann und die Anzahl der Spalten/Zeilen automatisch anhand der Bildschirmgröße bestimmen kann? zu ladenTabelle Zeile Child Count basierend auf der Bildschirmgröße

Antwort

1

können Sie die Bildschirmgröße mit Window-Manager

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
final DisplayMetrics displayMetrics = new DisplayMetrics(); 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int height = displayMetrics.heightPixels; 
int width = displayMetrics.widthPixels; 

oder

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

erhalten die erforderliche Anzahl von Karten zu finden.

besser stellen Sie die Breite einer Karte als proportional zur Bildschirmbreite zum Beispiel

int padding = 5; 
float cardwidth = width*0.25 - padding; // card with 25% width of screen 

     int count = width /cardwidth ; // 
+0

Höhe Umschalten in Ihrer Antwort auf die Breite funktioniert perfekt für die Tablette jedoch das Telefon eine höhere Auflösung hat, so gibt es mehr Karten auf der Telefonversion als kann auf dem Bildschirm passen. – XvKnightvX

+1

besser Sie nicht die Breite als 120 statt, dass berechnen Sie als Prozentwert der Bildschirmbreite wie 25% der Bildschirmbreite Cardwidth = Breite * 0,25 – AnshaD

+0

Mit ein paar schnelle Anpassung an Ihre ursprüngliche Antwort konnte ich anpassen Anzahl pro Zeile richtig - 'int cardPerRow = width/100/(int) displayMetrics.density; // 100 ist die Breite der Karte – XvKnightvX

Verwandte Themen