2016-06-01 20 views
1

Ich möchte ein Quadrat FrameLayout, die die Breite der Eltern füllt und deren Höhe entspricht der Breite. Ich habe versucht, ein addOnLayoutChangeListener dem Layout hinzuzufügen, aber ich kann nicht requestLayout darauf von innen aufrufen, so dass ich keine Möglichkeit habe, ihm zu sagen, die Größe zu ändern.Android dynamisch ändern Layoutgröße

Was kann ich tun, damit die Höhe zur Laufzeit der Breite entspricht?

Antwort

1

Einfache Lösung erweitern FrameLayout

public class SquareFrameLayout extends FrameLayout { 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
      // or you can use this if you want the square to use width as it basis 
      super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 
} 

wie es Ihr Layout verwenden unter

<your.package.SquareFrameLayout 
    android:layout_width="match_parent" 
    ......> 
     <!-- other child views --> 
</your.package.SquareFrameLayout> 
+1

erhalten Ich hatte gehofft, nicht außer Kraft setzen das Layout, aber Sie haben wahrscheinlich Recht, es ist der einfachste Weg. Vielen Dank! – Nick

+0

@Nick willkommen Happy Coding :) –

+0

@Nick auch abstimmen :) –

0

Nachdem Sie die Ansicht nur noch die folgenden

ViewGroup.LayoutParams lp = view.getLayoutParams(); 
    Display display = ((AppCompatActivity) context).getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int screenWidth = size.X; 
    lp.height = screenWidth; 
    view.setLayoutParams(lp); 
+0

Ich werde die Ansicht programmgesteuert hinzufügen, weil es sich ändern wird. Danke für deine Antwort! – Nick

+0

nette Antwort, Logik. Es wird nützlich sein –

Verwandte Themen