Platziere View in FrameLayout in Android

8

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.

    
hpique 03.10.2010, 10:12
quelle

5 Antworten

2

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.

    
Tom 27.02.2011, 07:27
quelle
11

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%     
tulio84z 19.01.2012 18:46
quelle
1

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.)

    
Matthias Schippling 03.10.2010 12:37
quelle
1

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.

    
Michel 25.03.2014 13:11
quelle
0

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: -)

    
Quinn1000 03.10.2010 12:22
quelle