Ich brauche eine Ansicht (benutzerdefinierte Ansicht mit der Bezeichnung DayView
), die die doppelte Höhe der scrollView, in der sie sich befindet, dehnt. In dieser Ansicht gibt es zwei verschachtelte Ansichten, von denen eine eine andere benutzerdefinierte Ansicht ist. Die benutzerdefinierten Ansichten erstrecken sich alle von RelativeLayout
.So passen Sie Kinder von customview korrekt an
Das Layout ist so:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Is twice the size as scrollView, see code below -->
<com.example.DayView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Should be same size as parent DayView -->
<include layout="@layout/layout_dayplan_background"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- Should be same size as parent DayView -->
<com.example.BlockView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.example.DayView>
</ScrollView>
Die zwei verschachtelten Ansichten (include
und BlockView
) sollten DayView
die gleiche Höhe wie der Elternteil haben.
In der DayView
überschreibe ich die onMeasure, um es doppelt so groß zu machen. Dies funktioniert: (siehe die ‚* 2‘ in der vorletzten Zeile)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth, parentHeight);
this.setLayoutParams(new ScrollView.LayoutParams(parentWidth, parentHeight * 2));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Die DayView
die richtige Größe hat, jedoch die beiden verschachtelten Ansichten mit den Eltern nicht strech entlang, sondern scheinen zu verwenden, eine wrap_content
Höhenlayoutregel.
Frage
Wie kann ich diese beiden verschachtelten Ansichten der gleichen Höhe wie die Eltern übernehmen DayView
?
Versuchen Sie nach dem Entfernen dieser Zeile 'super.onMeasure (widthMeasureSpec, heightMeasureSpec);' –
@JimitPatel: Das funktioniert nicht, das Fenster scheint nicht doppelt so groß zu sein, und die Kinder aren überhaupt nicht gezeichnet. – Marcel50506
Dann machen Sie 'parentHeight * 2' und übergeben Sie es an' setMeasuredDimension() 'Methode. Benutze modifizierten Wert überall. Entfernen Sie außerdem 'setLayoutParams()' und 'super.onMeasure()'. Weil ich im Allgemeinen 'setMeasuredDimension()' Methode ohne andere erwähnte Methode verwende und es für mich funktioniert –