2012-10-26 5 views
5

Ich versuche, eine Oberflächenansicht (eine benutzerdefinierte Klasse, die Oberflächenansicht erweitert), die ich im XML-Layout hinzufügen, um ein festes Größenverhältnis zu haben: 4: 3 (Länge zu Breite).Android: Wie kann ich meine benutzerdefinierte Oberflächenansicht auf ein festes Größenverhältnis in XML einstellen?

Ich möchte, dass es so viel wie möglich von seinem Elternteil füllt, entweder auf der Länge oder Breite, aber sobald es die volle Länge oder Breite erreicht, wird es die andere Seite anpassen, um ein festes Größenverhältnis wie ich schon sagte.

Wie kann ich so etwas erreichen?

Danke.

+0

Ich bevorzuge es stattdessen im XML-Layout zu machen, und später die Auflösung von der Klasse zu lesen. –

Antwort

5

In der OnCreate-Methode Ihrer Aktivität konnten Sie die Auflösung des Bildschirms lesen und die Breite und Höhe des Layouts festlegen.

Beispiel Sie verwenden RealtiveLayout vorausgesetzt:

private void create43RatioSurface() { 
    SurfaceView surfaceView43 = (SurfaceView)findViewById(R.id.surfaceView1); 

    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    int height = 0; 
    int width = 0; 

    if(metrics.widthPixels < metrics.heightPixels){ 
     width = metrics.widthPixels; 
     height= (metrics.widthPixels/4) * 3 ; 
    } else { 
     height= metrics.heightPixels; 
     width= (metrics.heightPixels/4) * 3 ; 
    } 

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height); 
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); 
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 

    surfaceView43.setLayoutParams(layoutParams);   
} 
+0

Es ist einfach, dynamisch zu machen, aber ich versuche, es in xml zu tun, und sobald es seine Größe bereits hat, finde ich nur das Maßstabsverhältnis und zeichne alles in der Leinwand entsprechend. –

+0

Ok, entschuldige, dass ich deine missverstanden habe Frage. Sie wollen eine XML-Lösung nur ... –

2

Diese Art von Hacky sein könnte, aber sie vielleicht eine leere Imageview als eine Art Rahmen für die Surface setzen könnte. Jetzt, um den Wahnsinn zu erklären

1) Erstellen Sie ein Bild-Asset, das dem gewünschten Anteil entspricht, das ist alles transparent. Läßt Anruf tis unsere Geisterbild (wahrscheinlich am besten, es unsichtbar sowie machen)

2) ein relatives Layout verwenden und die Imageview in dem relativen Layout mit match_parent für Höhe und Breite platzieren und mit Scaletype CENTER_INSIDE oder CENTER_CROP wenn Sie gingst van gocha und erstellt, um das Layout nach dem Imageview und aligntop/unten/rechts/links mit dem Bild Ansicht

ich habe ein massives Vermögen

3) fügen Sie Ihre Oberflächenansicht nicht versucht Dies Implementierung, aber es sollte Ihnen das Verhältnis geben, das Sie für welchen Bildschirm Sie haben wollen.

+2

klingt verrückt genug, dass es funktionieren könnte! :) lass mich versuchen –

+0

@DanielMendel, hat das funktioniert? –

Verwandte Themen