Android: FrameLayout kullanarak düğmeyi ekranın sağ altına hizalayın.


106

Haritanın yakınlaştırma kontrollerini ekranın sağ alt köşesine koymaya çalışıyorum. Bunu RelativeLayout ile hem alignParentBottom="true"ve kullanarak yapabilirdim alignParentRight="true", ancak Framelayout ile böyle bir nitelik bulamadım. Bunu ekranın sağ alt kısmına nasıl hizalarım?

Yanıtlar:


252

Diğer cevaplarda söylenene rağmen aslında mümkün. Eğer bir varsa FrameLayoutve altına bir çocuk öğesi konumlandırmak istediğiniz kullanabileceğiniz android:layout_gravity="bottom"ve altına o çocuğu hizalamak edeceğiniFrameLayout .

Çalıştığını biliyorum çünkü kullanıyorum. Geç olduğunu biliyorum, ancak bu google'da üst sıralarda yer aldığından başkaları için kullanışlı olabilir.


7
Merhaba byte1918, eğer bu sorunun doğru yanıt olmadığını düşünüyorsanız - ve bence bu herkes için yararlı olacaktır - doğru çözümü gönderirseniz. Veya en azından bunu yanlış cevap yapan şeyi açıklayın. Teşekkürler.
lblasa

33
Sağ alta hizalamak için android'i kullanabilirsiniz: layout_gravity = "bottom | right"
Marcin Raczkowski

1
önizlemeye hemen yansımazsa, tasarım sekmesinden ayarlamayı deneyin. genellikle çalışır,
yUdoDis

Bunu Textview ile denedim ve çalışmıyor
The Only Smart Boy

51

Ben de bu durumla karşılaştım ve FrameLayout kullanarak nasıl yapılacağını buldum. Aşağıdaki çıktı aşağıda verilen kod ile üretilir.

FrameLayout kullanılarak bir görüntünün üzerinde gösterilen sağ alta hizalanmış bazı metinler.

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

Resmin üzerindeki metin konumunu ayarlamak için kenar boşluğu değerini değiştirin. Kenar boşluğunun kaldırılması, bazen metnin görünümün dışına çıkmasına neden olabilir.


en iyi cevap ... teşekkürler, uzun süredir devam eden bir gizemi çözdü.
YvesLeBorg

38

Kullanılarak elde edilebilir 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
Bu kullanım ise, işe yaramaz olduğu wrap_contentiçinde RelativeLayout. Çünkü o zaman zaten RelativeLayout tüm ekrana ölçeklendi.
Yura Shinkarev

15

Ayar android:layout_gravity="bottom|right"benim için çalıştı


9

Bunu yapmanın iki yolu:

1) Çerçeve Düzeni Kullanma

android:layout_gravity="bottom|right"

2) Göreceli Bir Düzen Kullanmak

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


3

Java kodu ile denemek istiyorsanız. Hadi bakalım -

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

tam istediğim şey. Küçük ekleme - LayoutParams, FrameLayout.LayoutParams'dan olmalıdır. Ve isterseniz sağ alt köşeyi kullanın: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK

2

FrameLayout'a görünmez bir TextView ekleyebilirsiniz.

    <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

Bunu android stüdyosunun activity.xml sayfasının kısıtlama widget'ını kullanarak yapmanın birçok yöntemi vardır.

En yaygın iki yöntem şunlardır:

  1. Düğme görünümünüzü seçin ve kenar boşluklarını ayarlayın.
  2. "Tüm öznitelikler" e, ardından "layout_constraints" e gidin ve ardından şunu seçin:
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent

-3

Bunu FrameLayout ile yapamazsınız.

Spesifikasyondan:

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

"FrameLayout, tek bir öğeyi görüntülemek için ekrandaki bir alanı bloke etmek üzere tasarlanmıştır. Bir FrameLayout'a birden çok alt öğe ekleyebilirsiniz, ancak tüm alt öğeler ekranın sol üst tarafına sabitlenir."

Neden RelativeLayout kullanılmasın?


Sol tarafta haritayla örtüşen bir Listenin gösterilmesini istiyorum. Oh, RelativeLayout ile mümkün değil mi? Tamam teşekkürler.
Rohith Nandakumar

1
"ama tüm çocuklar ekranın sol üst köşesine sabitlenmiştir" - ekranın üst kısmı değil, sağa, aşağıya vb. hizalayabilirsiniz?
Rohith Nandakumar

Evet, bu RelativeLayout ile mümkündür. Görünümleri üst üste yerleştirebilirsiniz.
Juhani

Bu aslında yarısı doğrudur. OP'nin istediği şey elde edilebilir, ancak bahsettiğiniz gibi elbette sınırlı görüşle. Ancak bunun "başarılamaz" olduğunu söylemek yanlış olur!
sud007
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.