2016-04-04 3 views
1

Also, im Grunde habe ich eine benutzerdefinierte Ansicht:Unterschied in RelativeLayout und andere in onMeasure

public class CustomView extends PercentFrameLayout 

Wie Sie mich es von PercentFrameLayout geerbt haben sehen können (vielleicht der Grund für dieses Problem sein, aber ich bin nicht sicher)

Innerhalb dieser Ansicht i Layout XML-Datei aufgeblasen haben:

<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center"> 

<View 
    style="@style/SomeStyle" 
    app:layout_widthPercent="98%" 
    app:layout_heightPercent="98%"/> 
.... 
</merge> 

auch in dieser benutzerdefinierten Ansicht, i onMeasure Methode, es zu vermehren außer Kraft gesetzt haben ist Größe b y 2 (nur Test):

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(MeasureSpec.getSize(widthMeasureSpec) * 2|MeasureSpec.EXACTLY, MeasureSpec.getSize(heightMeasureSpec) * 2|MeasureSpec.EXACTLY); 
    } 

Derzeit wird diese benutzerdefinierte Ansicht ist in RelativeLayout:

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"> 
     <com.example.CustomView 
       android:id="@+id/progress_new_collagen" 
       android:layout_width="120dp" 
       android:layout_height="120dp" 
       android:layout_centerHorizontal="true"/> 
</RelativeLayout> 

Das Problem: Derzeit seine Größe nicht mit zwei multipliziert, das multipliziert mit, wie 4 für die Breite und 3 für die Höhe, und ich weiß nicht warum.

Die seltsame Sache, die ich eine Frage stellen gemacht werden soll: Wenn es zu dieser Ansicht nicht RelativeLayout als Eltern, aber auch jede andere ViewGroup Klasse, wie FrameLayout, LinearLayout und so weiter - Code arbeiten. Es funktioniert auch, wenn ich nur onMeasure entferne. Gibt es einen Unterschied in diesen ViewGroups im Falle von onMeasure?

Antwort

0

RelativeLayout wird bei jeder Wiedergabe zweimal onMeasure() aufgerufen. Ich denke, das ist der Grund, warum Sie Ihre seltsamen Ergebnisse bekommen. Wenn die zweite onMeasure() die Ergebnisse aus dem ersten Aufruf verwendet, werden Sie Ihre Dimensionen nicht verdoppeln, sondern vervierfachen.

+0

Sie haben eigentlich recht! Danke auch, weißt du etwas, um es zu verhindern? Es ist nur im realen Projekt, es ist viel los in diesem Layout, und wenn ich es ändern werde, von nur RelativeLayout würde es mindestens 3 andere = ( –

+0

) Leider gibt es keine Möglichkeit, den doppelten Messdurchlauf der zu verhindern 'RelativeLayout' - so funktioniert es.Eine Sache, die Sie versuchen könnten, ist zu versuchen, schlau zu sein, wenn Sie die Maßangaben ändern.Vielleicht können Sie Ihre gewünschten Abmessungen berechnen und die Spezifikationen nur ändern, wenn Sie sie noch nicht erreicht haben . –

+0

Ja, ich habe mein Problem gelöst, indem ich die zurückgehende Größe predering. Also im Grunde, RelativeLayout ist nur die Kombination von LinearLayout und FrameLayout und deshalb misst es seine Kinder zweimal? Einmal für jeden Layou verwendet, um es zu erstellen? –

Verwandte Themen