Ý tưởng về các ràng buộc thiết lập theo chương trình có thể gây mệt mỏi. Giải pháp dưới đây sẽ hoạt động cho mọi bố cục cho dù là ràng buộc, tuyến tính, v.v. Cách tốt nhất là đặt một trình giữ chỗ tức là FrameLayout với các ràng buộc thích hợp (hoặc đặt đúng vị trí trong bố cục khác như tuyến tính) tại vị trí mà bạn mong đợi ở chế độ xem được lập trình có.
Tất cả những gì bạn cần làm là tăng cường chế độ xem theo chương trình và nó như một đứa trẻ đối với FrameLayout bằng cách sử dụng addChild()
phương thức. Sau đó, trong thời gian chạy, khung nhìn của bạn sẽ bị thổi phồng và được đặt đúng vị trí. Theo khuyến nghị của Android, bạn chỉ nên thêm một childView vào FrameLayout [link] .
Đây là mã của bạn sẽ trông như thế nào, giả sử bạn muốn tạo TextView theo chương trình tại một vị trí cụ thể:
Bước 1:
Trong bố cục của bạn sẽ chứa chế độ xem bị thổi phồng, hãy đặt FrameLayout ở vị trí chính xác và đặt cho nó một id, giả sử, "container".
Bước 2
Tạo bố cục với phần tử gốc là dạng xem bạn muốn tăng trong thời gian chạy, gọi tệp bố cục là "textview.xml":
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
</TextView>
BTW, đặt các tham số bố cục của frameLayout của bạn thành quấn_content luôn, bố cục khung sẽ trở nên lớn như cha mẹ tức là hoạt động tức là màn hình điện thoại.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Nếu không được đặt, theo mặc định, chế độ xem con của khung sẽ đi về phía trên bên trái của bố cục khung, do đó, chế độ xem của bạn sẽ chỉ đơn giản bay lên trên cùng bên trái của màn hình.
Bước 3
Trong phương pháp oncreate của bạn, làm điều này:
FrameLayout frameLayout = findViewById(R.id.container);
TextView textView = (TextView) View.inflate(this, R.layout.textview, null);
frameLayout.addView(textView);
(Lưu ý rằng cài đặt tham số cuối cùng của findViewById
để null
và thêm điểm bằng cách gọi addView()
vào xem container (frameLayout) là giống như chỉ đơn giản là gắn các quan điểm lạm phát bằng cách đi qua true
trong tham số thứ 3 của findViewById()
. Để biết thêm, xem này .)