Ich möchte eine Ansicht innerhalb eines FrameLayout programmgesteuert hinzufügen und sie an einem bestimmten Punkt innerhalb des Layouts mit einer bestimmten Breite und Höhe platzieren. Unterstützt FrameLayout dies? Wenn nicht, sollte ich eine dazwischenliegende ViewGroup verwenden, um dies zu erreichen?
%Vor%Meine ursprüngliche Idee war es, dem FrameLayout ein AbsoluteLayout hinzuzufügen und die Ansicht innerhalb des AbsoluteLayouts zu platzieren. Leider habe ich gerade herausgefunden, dass AbsoluteLayout veraltet ist.
Alle Hinweise werden sehr geschätzt. Danke.
Es ist richtig, dass mit FrameLayout alle Kinder oben links auf dem Bildschirm markiert sind, aber Sie haben immer noch etwas Kontrolle über die Einstellung ihrer Auffüllung. Wenn Sie für unterschiedliche untergeordnete Elemente unterschiedliche Auffüllwerte festlegen, werden diese an verschiedenen Stellen im FrameLayout angezeigt.
Das folgende Beispiel (Arbeitscode) zeigt, wie eine Ansicht (EditText) in einem FrameLayout platziert wird. Außerdem wird gezeigt, wie die Position des EditText mit dem SetPadding-Setter des FrameLayouts festgelegt wird (jedes Mal, wenn der Benutzer auf FrameLayout klickt, wird die Position des EditText auf die Position des Klicks gesetzt):
%Vor%}
main.xml
%Vor%Vom Link wurde Quinn1000 bereitgestellt:
Sie können einem FrameLayout mehrere untergeordnete Elemente hinzufügen, aber alle untergeordneten Objekte werden oben links auf dem Bildschirm angezeigt.
Dies bedeutet, dass Sie Ihre Ansicht nicht an einem bestimmten Punkt innerhalb des FrameLayouts platzieren können (außer Sie möchten, dass es sich in der oberen linken Ecke befindet: -)).
Wenn Sie die absolute Positionierung der Ansicht benötigen, versuchen Sie AbsoluteLayout :
Ein Layout, mit dem Sie genaue Positionen (x / y-Koordinaten) der untergeordneten Elemente angeben können. Absolute Layouts sind weniger flexibel und schwerer zu warten als andere Layouttypen ohne absolute Positionierung.
Wie zur Einstellung der Breite und Höhe der Ansicht, wie Quinn1000 sagte, liefern Sie die Methode v.setLayoutParams()
a LayoutParams -Objekt abhängig von dem ausgewählten Container (AbsoluteLayout, LinearLayout, etc.)
Sie können auch einen Rand um die neu hinzugefügte Ansicht hinzufügen, um ihn innerhalb des FrameLayouts zu positionieren.
%Vor%Dadurch wird das FrameLayout 20 Pixel vom unteren Bildschirmrand entfernt positioniert.
Bearbeiten: vervollständigte das Beispiel so, dass es für sich selbst steht. Und oh, ja, es funktioniert.
Der Thread hier auf stackOverflow bei
Wie setzt manLayoutParams () für ein ImageView?
deckt es etwas ab.
Zum Beispiel: LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (30, 30); yourImageView.setLayoutParams (layoutParams);
bedeutet, dass Sie ein LinearLayout.LayoutParams (oder in Ihrem Fall ein FrameLayout.layoutParams) -Objekt definieren müssen, um es an die setLayoutParams-Methode Ihres v-Objekts zu übergeben.
Bei
es sieht fast so aus, als könnten Sie Ihr v fragen:
generateDefaultLayoutParams () über diese Methode, wenn Sie die Parameter nicht speziell definiert haben.
Aber es ist spät, und diese Verbindungen lassen meine Augen ein wenig bluten. Lass es mich wissen, wenn sie irgendwas helfen: -)
Tags und Links android android-layout framelayout