Android: allinea il pulsante alla parte inferiore destra dello schermo utilizzando FrameLayout?


106

Sto cercando di mettere i controlli di zoom della mappa nell'angolo in basso a destra dello schermo. Potrei farlo con RelativeLayout usando sia alignParentBottom="true"e alignParentRight="true", ma con Framelayout non ho trovato nessuno di questi attributi. Come lo allineo in basso a destra dello schermo?

Risposte:


252

In realtà è possibile, nonostante quello che viene detto in altre risposte. Se hai un FrameLayout, e vuoi posizionare un elemento figlio in fondo, puoi usare android:layout_gravity="bottom"e questo allineerà quel bambino alla fine del FrameLayout.

So che funziona perché lo sto usando. So che è in ritardo, ma potrebbe tornare utile ad altri poiché questo si colloca nelle prime posizioni su Google


7
Ciao byte1918, se ritieni che questa non sia la risposta giusta alla domanda sei più che benvenuto - e penso che sarebbe utile per tutti - se pubblichi la soluzione giusta. O almeno spiega cosa rende questa risposta sbagliata. Grazie.
lblasa

33
Per allineare in basso a destra puoi usare android: layout_gravity = "bottom | right"
Marcin Raczkowski

1
se non si riflette immediatamente nell'anteprima, prova a impostarlo dalla scheda di progettazione. di solito funziona,
yUdoDis

L'ho provato con Textview e non funziona
The Only Smart Boy

51

Mi sono anche imbattuto in questa situazione e ho capito come farlo usando FrameLayout. Il seguente output è prodotto dal codice fornito di seguito.

Un po 'di testo allineato in basso a destra che viene visualizzato su un'immagine utilizzando FrameLayout.

              <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:src="@drawable/contactbook_icon"
                        android:layout_gravity="center" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="140"
                        android:textSize="12dp"
                        android:textColor="#FFFFFF"
                        android:layout_gravity="bottom|right"
                        android:layout_margin="15dp" />
                </FrameLayout>

Modificare il valore del margine per regolare la posizione del testo sull'immagine. La rimozione del margine a volte potrebbe far uscire il testo dalla visualizzazione.


migliore risposta ... grazie, risolto un mistero di vecchia data.
YvesLeBorg

38

Può essere ottenuto utilizzando RelativeLayout

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

   <ImageView 
      android:src="@drawable/icon"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true" />

</RelativeLayout>

1
Questo non funziona, se usato wrap_contentin RelativeLayout. Perché comunque RelativeLayout viene ridimensionato su tutto lo schermo.
Yura Shinkarev

15

L'impostazione ha android:layout_gravity="bottom|right"funzionato per me


9

Due modi per farlo:

1) Utilizzo di un layout di cornice

android:layout_gravity="bottom|right"

2) Utilizzo di un layout relativo

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 


3

Se vuoi provare con il codice java. Ecco qui -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity

proprio quello che voglio. Piccola aggiunta: LayoutParams dovrebbe provenire da FrameLayout.LayoutParams. E se lo vuoi nell'angolo in basso a destra usa: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK

2

puoi aggiungere un TextView invisibile al FrameLayout.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/daily_delete_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="DELETE"
            android:layout_gravity="center"/>
        <Button
            android:id="@+id/daily_save_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="SAVE"
            android:layout_gravity="center"/>
    </LinearLayout>


0

Esistono molti metodi per farlo utilizzando il widget dei vincoli della pagina activity.xml di Android Studio.

I due metodi più comuni sono:

  1. Seleziona la visualizzazione dei pulsanti e regola i suoi margini.
  2. Vai a "Tutti gli attributi", quindi a "layout_constraints", quindi seleziona
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent

-3

Non puoi farlo con FrameLayout.

Dalle specifiche:

http://developer.android.com/reference/android/widget/FrameLayout.html

"FrameLayout è progettato per bloccare un'area sullo schermo per visualizzare un singolo elemento. Puoi aggiungere più elementi secondari a un FrameLayout, ma tutti gli elementi secondari sono ancorati nella parte superiore sinistra dello schermo."

Perché non usare RelativeLayout?


Voglio che un elenco venga visualizzato sul lato sinistro, sovrapposto alla mappa. Oh questo è possibile con RelativeLayout, no? Ok grazie.
Rohith Nandakumar

1
"ma tutti i bambini sono agganciati in alto a sinistra dello schermo" - non necessariamente nella parte superiore dello schermo, puoi allinearlo a destra, in basso, ecc., giusto?
Rohith Nandakumar

Sì, è possibile con RelativeLayout. È possibile disporre le viste una sopra l'altra.
Juhani

Questo è in realtà metà corretto. Ciò che OP sta chiedendo è realizzabile ma con una visione limitata, ovviamente, come hai menzionato. Ma dire che questo è "non realizzabile" sarebbe sbagliato!
sud007
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.