2017-03-22 3 views
0

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?

+0

Versuchen Sie nach dem Entfernen dieser Zeile 'super.onMeasure (widthMeasureSpec, heightMeasureSpec);' –

+0

@JimitPatel: Das funktioniert nicht, das Fenster scheint nicht doppelt so groß zu sein, und die Kinder aren überhaupt nicht gezeichnet. – Marcel50506

+0

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 –

Antwort

0

können Sie folgende Methoden versuchen

 int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
     int parentHeight = MeasureSpec.getSize(heightMeasureSpec) * 2; 
     this.setMeasuredDimension(parentWidth, parentHeight); 
     measureChildren(MeasureSpec.makeMeasureSpec(parentWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(parentHeight, MeasureSpec.EXACTLY)); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

Hier ist es Kinder zu messen. Vielleicht kann das funktionieren

+0

Dies funktioniert nicht. Das Ergebnis ist, dass die DayView so wirkt, als wäre die Höhe 'wrap_content', also ist sie nicht mehr doppelt so groß wie das Scroll-Fenster. – Marcel50506

Verwandte Themen