Android: Căn chỉnh nút ở góc dưới bên phải màn hình bằng FrameLayout?


106

Tôi đang cố gắng đặt các điều khiển thu phóng của bản đồ ở góc dưới cùng bên phải của màn hình. Tôi có thể làm điều đó với RelativeLayout bằng cách sử dụng cả hai alignParentBottom="true"alignParentRight="true", nhưng với Framelayout, tôi không tìm thấy bất kỳ thuộc tính nào như vậy. Làm cách nào để căn chỉnh nó ở góc dưới bên phải màn hình?

Câu trả lời:


252

Trên thực tế, nó có thể, mặc dù những gì được nói trong các câu trả lời khác. Nếu bạn có FrameLayoutvà muốn định vị một mục con ở dưới cùng, bạn có thể sử dụng android:layout_gravity="bottom"và điều đó sẽ căn chỉnh mục con đó ở dưới cùng của FrameLayout.

Tôi biết nó hoạt động vì tôi đang sử dụng nó. Tôi biết là muộn, nhưng nó có thể hữu ích cho những người khác vì điều này xếp ở các vị trí hàng đầu trên google


7
Xin chào byte1918, nếu bạn cho rằng đây không phải là câu trả lời phù hợp cho câu hỏi, bạn rất hoan nghênh - và tôi nghĩ nó sẽ hữu ích cho mọi người - nếu bạn đăng giải pháp phù hợp. Hoặc giải thích ít nhất những gì làm cho câu trả lời sai. Cảm ơn.
lblasa

33
Để sắp xếp dưới bên phải bạn có thể sử dụng android: layout_gravity = "bottom | đúng"
Marcin Raczkowski

1
nếu nó không phản ánh ngay lập tức trong bản xem trước, hãy thử đặt nó từ tab thiết kế. thường hoạt động,
yUdoDis

Tôi đã thử điều đó với Textview và nó không hoạt động
Cậu bé thông minh duy nhất

51

Tôi cũng đã gặp phải tình huống này và tìm ra cách thực hiện bằng FrameLayout. Đầu ra sau đây được tạo ra bởi mã dưới đây.

Một số văn bản được căn chỉnh ở phía dưới bên phải hiển thị trên hình ảnh bằng 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>

Thay đổi giá trị lề để điều chỉnh vị trí văn bản trên hình ảnh. Việc xóa lề đôi khi có thể khiến văn bản bị lệch khỏi chế độ xem.


câu trả lời hay nhất ... cảm ơn, đã giải quyết một bí ẩn lâu nay.
YvesLeBorg

38

Nó có thể đạt được bằng cách sử dụng 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
Điều này không hoạt động, nếu sử dụng wrap_contenttrong RelativeLayout. Vì dù sao thì RelativeLayout cũng được mở rộng trên toàn màn hình.
Yura Shinkarev

15

Cài đặt android:layout_gravity="bottom|right"phù hợp với tôi


9

Hai cách để làm điều này:

1) Sử dụng bố cục khung hình

android:layout_gravity="bottom|right"

2) Sử dụng một bố cục tương đối

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


3

Nếu bạn muốn thử với mã java. Của bạn đây -

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

chỉ những gì tôi muốn. Thêm một chút - LayoutParams nên từ FrameLayout.LayoutParams. Và nếu bạn muốn, hãy sử dụng góc dưới cùng bên phải: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
SajithK

2

bạn có thể thêm TextView vô hình vào 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

Có nhiều phương pháp để thực hiện việc này bằng cách sử dụng tiện ích hạn chế của trang activity.xml của android studio.

Hai phương pháp phổ biến nhất là:

  1. Chọn chế độ xem nút của bạn và điều chỉnh lề của nó.
  2. Chuyển đến "Tất cả các thuộc tính", sau đó đến "layout_constraints", sau đó chọn
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent

-3

Bạn không thể làm điều đó với FrameLayout.

Từ thông số kỹ thuật:

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

"FrameLayout được thiết kế để chặn một vùng trên màn hình để hiển thị một mục duy nhất. Bạn có thể thêm nhiều phần tử con vào một FrameLayout, nhưng tất cả phần tử con đều được gắn ở trên cùng bên trái của màn hình."

Tại sao không sử dụng RelativeLayout?


Tôi muốn một Danh sách được hiển thị ở phía bên trái, chồng lên bản đồ. Ồ, điều đó có thể với RelativeLayout phải không? Được rồi cảm ơn.
Rohith Nandakumar,

1
"nhưng tất cả trẻ em đều được gắn ở trên cùng bên trái của màn hình" - không nhất thiết phải là đầu của màn hình, bạn có thể căn chỉnh nó sang phải, dưới cùng, v.v. phải không?
Rohith Nandakumar

Có, điều đó có thể thực hiện được với RelativeLayout. Bạn có thể bố trí các khung nhìn chồng lên nhau.
Juhani

Điều này thực sự đúng một nửa. Những gì OP đang yêu cầu là có thể đạt được nhưng tất nhiên với tầm nhìn hạn chế như bạn đã đề cập. Nhưng nói rằng điều này là 'không thể đạt được' sẽ là sai!
sud007
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.