Android Layout Aliniere dreapta (Programare, Android, Aspect, Alinierea La Dreapta)

Domnul Reginold Francis a intrebat.

Am următorul layout în loc

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns_android="http://schemas.android.com/apk/res/android"
    android_orientation="vertical" android_layout_width="fill_parent"
    android_layout_height="fill_parent">

    <LinearLayout android_orientation="vertical"
        android_layout_width="fill_parent" android_layout_height="fill_parent"
        android_layout_weight="1">


        <WebView xmlns_android="http://schemas.android.com/apk/res/android"
            android_id="@+id/webview" android_layout_width="fill_parent"
            android_layout_height="fill_parent" />
    </LinearLayout>

    <LinearLayout android_orientation="horizontal"  android_layout_width="fill_parent" android_layout_height="fill_parent"  android_layout_weight="13">
        <LinearLayout android_id="@+id/LinearLayout01" android_layout_width="wrap_content" android_layout_height="wrap_content">
            <LinearLayout android_orientation="horizontal" android_layout_width="fill_parent" android_layout_height="fill_parent" android_layout_weight="1">
                    <ImageButton android_background="@null" android_id="@+id/back" android_layout_width="fill_parent" android_layout_height="wrap_content" android_src="@drawable/back" android_padding="10dip" />
            </LinearLayout>

            <LinearLayout android_orientation="horizontal" android_layout_width="fill_parent" android_layout_height="fill_parent" android_layout_weight="1">
                <ImageButton android_background="@null" android_id="@+id/forward" android_layout_width="fill_parent" android_layout_height="wrap_content" android_src="@drawable/forward" android_padding="10dip" />
            </LinearLayout>

        </LinearLayout>

        <RelativeLayout android_orientation="horizontal" android_layout_width="wrap_content" android_layout_height="fill_parent"    android_layout_weight="1" >
                <ImageButton android_background="@null" android_id="@+id/special"   android_layout_width="fill_parent" android_layout_height="wrap_content" android_src="@drawable/barcode" android_padding="10dip" android_layout_gravity="right"/>
        </RelativeLayout>




    </LinearLayout>


</LinearLayout>

În scopul acestei întrebări, mă interesează doar jumătatea inferioară a layout-ului. În acest moment conține 3 butoane de imagine. Primele 2, vreau să fie alăturate unul lângă altul aliniate la stânga. Cel de-al treilea, vreau să fie aliniat în partea dreaptă.

Așa cum este, primele 2 butoane sunt acolo unde vreau să fie, dar al treilea rămâne încăpățânat să fie aliniat la stânga. Cum aș putea să îl aliniez la dreapta.

5 răspunsuri
Octavian A. Damiean

Layout-ul este extrem de ineficient și umflat. Nu ai nevoie de atât de multe LinearLayouts. De fapt, nu aveți nevoie de nici unul LinearLayout deloc.

Folosiți doar un singur RelativeLayout. Așa.

<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    android_layout_width="fill_parent"
    android_layout_height="wrap_content">
    <ImageButton android_background="@null"
        android_id="@+id/back"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_src="@drawable/back"
        android_padding="10dip"
        android_layout_alignParentLeft="true"/>
    <ImageButton android_background="@null"
        android_id="@+id/forward"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_src="@drawable/forward"
        android_padding="10dip"
        android_layout_toRightOf="@id/back"/>
    <ImageButton android_background="@null"
        android_id="@+id/special"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_src="@drawable/barcode"
        android_padding="10dip"
        android_layout_alignParentRight="true"/>
</RelativeLayout>

Cristian

Poți face toate astea folosind doar un singur RelativeLayout (care, apropo, nu are nevoie de android:orientation parametru). Astfel, în loc să ai un LinearLayout, care să conțină o grămadă de chestii, poți face ceva de genul:

<RelativeLayout>
    <ImageButton
        android_layout_width="wrap_content"
        android_id="@+id/the_first_one"
        android_layout_alignParentLeft="true"/>
    <ImageButton
        android_layout_width="wrap_content"
        android_layout_toRightOf="@+id/the_first_one"/>
    <ImageButton
        android_layout_width="wrap_content"
        android_layout_alignParentRight="true"/>
</RelativeLayout>

După cum ați observat, lipsesc câțiva parametri XML. Eu doar arătam parametrii de bază pe care trebuie să îi pui. Puteți completa restul.

Alexander Malakhov

Dacă doriți să utilizați LinearLayout, puteți face alinierea cu layout_weight cu Space element.

De exemplu, următoarele locuri de dispunere textView și textView2 unul lângă altul și textView3 vor fi aliniate la dreapta

<LinearLayout
    android_orientation="horizontal"
    android_layout_width="fill_parent"
    android_layout_height="wrap_content">

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceMedium"
        android_text="Medium Text"
        android_id="@+id/textView" />

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceMedium"
        android_text="Medium Text"
        android_id="@+id/textView2" />

    <Space
        android_layout_width="0dp"
        android_layout_weight="1"
        android_layout_height="20dp" />

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceMedium"
        android_text="Medium Text"
        android_id="@+id/textView3" />
</LinearLayout>

puteți obține același efect și fără Space dacă ați seta layout_weight la textView2. Doar că mie îmi plac lucrurile mai separate, în plus, pentru a demonstra Space elementul.

    <TextView
        android_layout_width="0dp"
        android_layout_weight="1"
        android_layout_height="wrap_content"
        android_textAppearance="?android:attr/textAppearanceMedium"
        android_text="Medium Text"
        android_id="@+id/textView2" />

Rețineți că ar trebui (nu trebuie, totuși) să setați layout_width în mod explicit, deoarece oricum va fi recalculat în funcție de greutatea sa (la fel cum ar trebui să setați înălțimea în elementele de verticală LinearLayout). Pentru alte sfaturi privind performanța de aspect, consultați Trucuri de prezentare Android serie.

alvaroIdu

Acesta este un exemplu pentru un RelativeLayout:

RelativeLayout relativeLayout=(RelativeLayout)vi.findViewById(R.id.RelativeLayoutLeft);
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)relativeLayout.getLayoutParams();
                params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                relativeLayout.setLayoutParams(params);

Cu un alt tip de layout (de exemplu LinearLayout) trebuie doar să schimbați pur și simplu RelativeLayout pentru LinearLayout.

Joseph Selvaraj

Pentru a sprijini versiunea mai veche Space poate fi înlocuit cu View, după cum urmează. Adăugați această vizualizare între după componenta cea mai din stânga și înainte de componenta cea mai din dreapta. Această vizualizare cu greutate = 1 se va întinde și va umple spațiul.

    <View
        android_layout_width="0dp"
        android_layout_height="20dp"
        android_layout_weight="1" />

Codul complet de eșantionare este dat aici. Acesta are 4 componente. Două săgeți vor fi în partea dreaptă și în partea stângă. Textul și rotița vor fi în mijloc.

    <ImageButton
        android_id="@+id/btnGenesis"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="center|center_vertical"
        android_layout_marginBottom="2dp"
        android_layout_marginLeft="0dp"
        android_layout_marginTop="2dp"
        android_background="@null"
        android_gravity="left"
        android_src="@drawable/prev" />

    <View
        android_layout_width="0dp"
        android_layout_height="20dp"
        android_layout_weight="1" />

    <TextView
        android_id="@+id/lblVerseHeading"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_marginTop="5dp"
        android_gravity="center"
        android_textSize="25sp" />

    <Spinner
        android_id="@+id/spinnerVerses"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_marginLeft="5dp"
        android_gravity="center"
        android_textSize="25sp" />

    <View
        android_layout_width="0dp"
        android_layout_height="20dp"
        android_layout_weight="1" />

    <ImageButton
        android_id="@+id/btnExodus"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="center|center_vertical"
        android_layout_marginBottom="2dp"
        android_layout_marginLeft="0dp"
        android_layout_marginTop="2dp"
        android_background="@null"
        android_gravity="right"
        android_src="@drawable/next" />
</LinearLayout>