2013-03-21 10 views
5

Ich versuche, relatives Layout mit einer benutzerdefinierten Klasse, die Ansicht zu erweitern, und ein paar Schaltflächen verwenden. Das ist, was ich will es schließlich wie folgt aussehen:Android - XML-Layout vs programmatic

http://imgur.com/B5MtdJ7

(verzeihen Sie mir einen Link, anstatt ein Bild veröffentlichen, anscheinend bin ich noch nicht cool genug)

Derzeit ist diese fest einprogrammiert mit Höhen in dp (siehe XML unten), und es gibt zwei Probleme:

  • Es sieht nur akzeptabel auf meinem Nexus 7-Bildschirm, und kein anderes Gerät
  • beiden OnDraw benutzerdefinierten Ansichten erfüllen hod bietet nach wie vor eine Leinwand mit Höhe und Breite genau, dass die Auflösung des

Geräts passen Wenn ich versuche, layout_height zu setzen jede benutzerdefinierte Ansicht Versuche wrap_content, den ganzen Bildschirm aufzunehmen, die mit Punkt 2 konsistent scheint , aber klar ist nicht was ich will.

Was ich erreichen möchte, ist ein Relatives Layout mit zwei benutzerdefinierten Ansichten, das genau so aussieht wie im Bild, aber skaliert sich auf die Dimensionen des Bildschirms, auf dem es sitzt UND die benutzerdefinierte Ansichten tatsächlich weiß, wie groß ein Teil des Bildschirms, auf dem es sitzt. Wie mache ich das?

Edit: der Grund, warum dies ist "vs programmatic" ist, dass ich denke, auf Maßnahme überschreiben wäre kein schlechter Ruf, aber ich habe keine Ahnung, wie das mit dem XML interagieren würde. Ich hätte die Layoutdefinition lieber an einem Ort.

Meine XML ist unter:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".TrajectoryView" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" > 

    <com.sportsim.virtualcricket.view.SideProfileView 
     android:id="@+id/side_profile_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </com.sportsim.virtualcricket.view.SideProfileView> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5" > 

    <com.sportsim.virtualcricket.view.BirdsEyeView 
     android:id="@+id/birds_eye_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.25" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5" 
     android:text="Button" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5" 
     android:text="Button" /> 
</LinearLayout> 

Antwort

1

Dies wäre ziemlich einfach mit Linearlayout und Gewichte. Ich habe unten ein Beispiel gegeben, aber ich kann es im Moment nicht testen. Es sollte jedoch eine Richtung geben.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".TrajectoryView" > 

<com.sportsim.virtualcricket.view.SideProfileView 
    android:id="@+id/side_profile_view" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.5"/> 

<com.sportsim.virtualcricket.view.BirdsEyeView 
    android:id="@+id/birds_eye_view" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.25" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.25" 
    android:orientation="horizontal"> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="0.5" 
    android:text="Button" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="0.5" 
    android:text="Button" /> 

</LinearLayout> 
</LinearLayout> 
+0

Danke, ich gebe das, wenn ich nach Hause komme. Wird dies den Zustand der Tasten beibehalten (dh jeder nimmt die halbe Breite des Bildschirms ein und ist nebeneinander?) Nicht, dass es eine große Sache ist, da dies nur eine Testaktivität ist, aber ich würde es gerne tun lerne, was ich davon kann – Imran

+0

Ok, ich werde es ändern, so dass die Tasten nebeneinander sind. Das sollte jetzt in Ordnung sein. Noch einmal, ich habe es nicht getestet und generell verschachtelte Gewichte sind schlecht für die Leistung. Sie können das LinearLayout, das zum Festlegen der Schaltflächenpositionen verwendet wird, jedoch durch ein RelativeLayout ersetzen. –

+0

Ah schön, ja die RelativeLayout Sache klingt ziemlich gut - Prost Mann: D – Imran