2016-07-25 15 views
0

Ich habe eine benutzerdefinierte Ansicht erstellt, die ich in RelativeLayout mit einer Schaltfläche darunter platzieren möchte. Das Problem, das ich habe ist, dass, wenn ich eine Schaltfläche unter der benutzerdefinierten Ansicht mit Android: layout_below = "@ id/customView", die customView volle Höhe nimmt, so gibt es keinen Platz auf dem Bildschirm, um die Schaltfläche zu platzieren, es ist nur platziert unter dem unteren Rand des Bildschirms und daher unsichtbar. Die Größe, die ich beim letzten Aufruf der onMeasure() -Methode von customView erhalte, sollte bereits berechnet sein, d. H. Alle anderen Ansichtsgrößen sollten berücksichtigt werden, aber in diesem Fall scheint die Höhe der Schaltfläche nicht zu sein.Benutzerdefinierte Ansicht wird falsch gemessen, wenn sie mit anderen Ansichtselementen platziert wird

Hier ist mein Layout:

<RelativeLayout 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:background="@color/darkBlueBackground" 
tools:context="com.example.TimePickerActivity"> 

<com.example.TimePicker 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="5dp" 
    android:paddingRight="20dp" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    android:id="@+id/picker"/> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/picker" 
    android:layout_weight="1" 
    android:id="@+id/okButton" 
    android:text="OK"/> 

Diese endgültige Größe ist, die von onMeasure() gemessen wurden:

07-26 00:24:39.551 19930-19930/com.example D/TAG: width = 720 height = 1230

Zur gleichen Zeit, wenn ich über den Button setzen die customView sieht alles sehr gut aus, onMeasure() erhält die richtige Höhe für die customView, also gibt es Platz für die Schaltfläche.

Hier ist das Layout für diesen Fall:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:id="@+id/okButton" 
    android:text="OK"/> 

<com.example.TimePicker 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/okButton" 
    android:paddingLeft="5dp" 
    android:paddingRight="20dp" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    android:id="@+id/picker"/> 

Die endgültige Größe von onMeasure ist anders: 07-26 00:24:39.551 19930-19930/com.example D/TAG: width = 720 height = 1134

Warum ist die benutzerdefinierte Ansicht (Timepicker) korrekt gemessen in einem Fall und isn‘ t in einem anderen?

Antwort

1

Versuchen Sie die Einstellung android:layout_height=wrap_content" auf der Ansicht. Wenn Sie die Höhe auf einstellen, füllt die Ansicht die Höhe des übergeordneten Elements aus und lässt keinen Platz für die Schaltfläche.

+0

Funktioniert immer noch nicht –

+0

Haben Sie ein Attribut 'layout_weight =" 1 "' auf Ihrer Schaltfläche? Das ist für ein lineares Layout relevanter. Wenn Sie nur zwei vertikal gestapelte Elemente haben, würde ein vertikales LinearLayout gleich funktionieren. –

+0

Ja, ich habe LinearLayout eigentlich mit zwei Buttons statt nur einem Button (was auch ohne 'layout_weight' immer noch nicht funktioniert). –