2013-02-08 16 views
102

Ho il seguente codice, come faccio a fare in modo che i 3 pulsanti siano in fondo?Metti i pulsanti nella parte inferiore dello schermo con LinearLayout?

<TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="60dp" 
     android:gravity="center" 
     android:text="@string/observer" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     tools:context=".asdf" 
     android:weight="1" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/button1" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="145dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center" 
      android:text="1" /> 

     <Button 
      android:id="@+id/button2" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="145dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center" 
      android:text="2" /> 

     <Button 
      android:id="@+id/button3" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="145dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center" 
      android:text="3" /> 
    </LinearLayout> 

+0

in che cosa è avvolta questa visualizzazione? una cornice? layout relativo? –

+0

Il tuo codice contiene un errore di battitura. Con 'android: weight =" 1 "' probabilmente intendevi 'android: layout_weight =" 1 "'. Questo non è il tuo problema però. –

+1

possibile duplicato di [Come allineare le visualizzazioni nella parte inferiore dello schermo?] (Http://stackoverflow.com/questions/2386866/how-to-align-views-at-the-bottom-of-the-screen) –

risposta

195

è necessario assicurarsi di quattro cose:

  • vostro fuori LinearLayout ha layout_height="match_parent"
  • vostro interno LinearLayout ha layout_weight="1" e layout_height="0dp"
  • tuo TextView ha layout_weight="0"
  • Hai impostato la gravità correttamente su il tuo interno LinearLayout: android:gravity="center|bottom"

Si noti che fill_parent non significa "occupa tutto lo spazio disponibile". Tuttavia, se si utilizza layout_height="0dp" con layout_weight="1", una vista occuperà tutto lo spazio disponibile (Can't get proper layout with "fill_parent").

Ecco un codice che ho rapidamente scritto che utilizza due LinearLayout in modo simile al codice.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/db1_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="@string/cow" 
     android:layout_weight="0" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:gravity="center|bottom" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/button1" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="145dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center" 
      android:text="1" /> 

     <Button 
      android:id="@+id/button2" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="145dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center" 
      android:text="2" /> 

     <Button 
      android:id="@+id/button3" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="145dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center" 
      android:text="3" /> 
    </LinearLayout> 

</LinearLayout> 

Il risultato sembra simile a questo:

enter image description here

+0

Votato solo per la nota su come ottenere una vista per riempire tutto lo spazio disponibile! Grazie, ottima risposta! – lisa

+0

Questi avvertimenti sui pelucchi ...! –

+0

Questa non è la soluzione migliore perché dopo non è possibile impostare la visualizzazione al centro dello schermo rimanente ......................... quindi il miglior premio per la soluzione va a questa risposta -http: // stackoverflow.com/a/26140793/4741746 –

1

Just Add layout_weight = "1" al tuo LinearLayout che avendo pulsanti.

Edit: - Vorrei che fosse semplice

seguire qualcosa di simile di seguito, il nome del tag potrebbe non essere corretto, è solo un'idea

<LL>// Top Parrent LinearLayout 
    <LL1 height="fill_parent" weight="1" "other tags as requirement"> <TV /><Butons /></LL1> // this layout will fill your screen. 
    <LL2 height="wrap_content" weight="1" orientation="Horizontal" "other tags as requirement"> <BT1 /><BT2/ ></LL2> // this layout gonna take lower part of button height of your screen 

<LL/> TOP PARENT CLOSED 
+0

aggiungendo anroid: layout_weight = "1" non sposta il layout lineare (e i pulsanti) in basso ... – thedeepfield

+0

guardalo ora, ora penso di essermi reso chiaro. – AAnkit

+0

@AND_DEV, hai dimenticato di impostare Android: gravità. In questo momento, i pulsanti saranno ancora in alto, anche se il LinearLayout che li contiene occupa l'intera area inferiore. –

16

È possibile utilizzare un RelativeLayout e allinearla verso il basso con android:layout_alignParentBottom="true"

+1

non è possibile utilizzare il layout lineare? – thedeepfield

+0

Lo è. Come già detto @AND_DEV: Usa 'layout_weight =" 1 "'. Con questo il tuo LinearLayout occuperà l'altezza a sinistra sullo schermo; ora puoi impostare la gravità dei pulsanti in basso. – Ahmad

+1

Relativelayouts sono difficili da leggere, quasi mai fanno quello che vuoi e sono generalmente terribili da mantenere. Prenderò il risultato della performance di 30 riproduzioni lineari su un periodo di riferimento in qualsiasi giorno della settimana, semplicemente perché consente di risparmiare ore di giochetti frustranti. –

4

prima creare il nome del file come footer.xml inserire questo codice al suo interno.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="78dp" 
    android:layout_gravity="bottom" 
    android:gravity="bottom" 
android:layout_weight=".15" 
    android:orientation="horizontal" 
    android:background="@drawable/actionbar_dark_background_tile" > 
    <ImageView 
     android:id="@+id/lborder" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/overlay" /> 
    <ImageView 
     android:id="@+id/unknown" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/notcolor" /> 
    <ImageView 
     android:id="@+id/open" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/openit" 
     /> 
    <ImageView 
     android:id="@+id/color" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/colored" /> 
     <ImageView 
     android:id="@+id/rborder" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/frames" 
     android:layout_weight=".14" /> 


</LinearLayout> 

quindi creare header.xml e inserire questo codice al suo interno .:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/action_bar_height" 
    android:layout_gravity="top" 
    android:baselineAligned="true" 
    android:orientation="horizontal" 
    android:background="@drawable/actionbar_dark_background_tile" > 
    <ImageView 
     android:id="@+id/contact" 
     android:layout_width="37dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start" 
     android:layout_weight=".18" 
     android:scaleType="fitCenter" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/logo"/> 

    <ImageView 
     android:id="@+id/share" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/share" /> 

    <ImageView 
     android:id="@+id/save" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/save" /> 

    <ImageView 
     android:id="@+id/set" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/set" /> 

    <ImageView 
     android:id="@+id/fix" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/light" /> 

    <ImageView 
     android:id="@+id/rotate" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/ic_menu_rotate" /> 

    <ImageView 
     android:id="@+id/stock" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight=".14" 
     android:background="@drawable/action_bar_left_button" 
     android:src="@drawable/stock" /> 

</LinearLayout> 

e poi nel vostro main_activity.xml e inserire questo codice al suo interno: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="fill_parent" 
tools:context=".MainActivity" 
android:id="@+id/relt" 
android:background="@drawable/background" > 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="78dp" 
    android:id="@+id/down" 
    android:layout_alignParentBottom="true" > 

    <include 
     android:layout_width="fill_parent" 
     android:layout_height="78dp" 
     layout="@layout/footer" > 
    </include> 
</LinearLayout> 
<ImageView 
    android:id="@+id/view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/down" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/inc" 
    > 
    </ImageView> 
    <include layout="@layout/header" 
     android:id="@+id/inc" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp"></include> 

codifica felice :)

+0

L'ordine è importante? Ho notato che hai inserito il piè di pagina come primo elemento e l'intestazione come l'ultimo. –

+0

@MartinKonecny ​​non importa perché RelativeLayout ha i propri attributi in modo da poter controllare dove si inseriscono altri layout all'interno di esso. come: layout_below, ecc. – k0sh

8

Creare il layout relativo e all'interno il layout creare il pulsante con questa linea

android:layout_alignParentBottom="true" 
+2

aggiungendo inoltre 'android: layout_centerHorizontal =" true "' anche per centrarlo orizzontalmente rende questa una grande soluzione. –

+1

Grande trucco. Grazie – zackygaurav

-3

Uso RelativeLayout:

<RelativeLayout 
      android:id="@+id/bottom_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 


      <Button 
       android:id="@+id/button2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:layout_alignParentBottom="true" 
       android:text="Button2" /> 
    </RelativeLayout> 
1

Aggiungi android:windowSoftInputMode="adjustPan" di manifestare - per l'attività corrispondente:

<activity android:name="MyActivity" 
    ... 
    android:windowSoftInputMode="adjustPan" 
    ... 
    </activity> 
0

si può racchiudere il tuo Button (s) all'interno di un RelativeLayout anche se il layout Parent è lineare. Assicurarsi che l'esterno più genitore abbia l'attributo android: layout_height impostato su match_parent. E in quel tag pulsante Aggiungi 'Android: alignParentBottom = 'True''

1

È possibile farlo prendendo un layout di cornice come layout genitore e poi mettere il layout lineare al suo interno. Ecco un esempio:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp" 
    android:textSize="16sp"/> 


<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp"  
    android:textSize="16sp" 
    /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp" 
    android:textSize="16sp"/> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="5dp" 
    android:textSize="16sp"/> 




</LinearLayout> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp" 
    android:layout_gravity="bottom" 
    /> 
</FrameLayout> 
Problemi correlati