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
?
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 = ( –
) 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 . –
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? –