Tôi đang cố gắng lồng một số RelativeLayout
vào bên trong của một LinearLayout
và cung cấp cho lề RelativeLayout
một lề mà khoảng cách của nó nằm cách xa mép của LinearLayout
. Cho đến nay tôi có điều này:Bố cục tương đối bỏ qua setMargin()
LayoutInflater.from(context).inflate(R.layout.conversation_view_layout, this, true);
this.setLayoutParams(new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
int tbm = AllConversationsActivity.topAndBottomMargin;
int lrm = AllConversationsActivity.leftAndRightMargin;
((MarginLayoutParams) this.getLayoutParams()).setMargins(lrm, tbm, lrm, tbm);
this.requestLayout();
Mà, nếu tôi đọc API chính xác, nên đặt lề của RelativeLayout thành số được chỉ định. Nó không phải là làm như vậy cả, nhưng thay vào đó dường như chỉ đơn giản là bỏ qua các setMargins()
hoàn toàn.
Ngoài ra, đây là xml tôi
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/conversation_picture"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"/>
<TextView
android:id="@+id/conversation_person"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/conversation_picture"
android:singleLine="true"
android:ellipsize="marquee"/>
<TextView
android:id="@+id/conversation_length"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"/>
<TextView
android:id="@+id/conversation_first_line"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@id/conversation_picture"
android:layout_alignParentLeft="true"
android:singleLine="true"
android:ellipsize="end"/>
<TextView
android:id="@+id/conversation_last_time"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@id/conversation_first_line"
android:layout_alignParentLeft="true"
android:singleLine="true"
android:ellipsize="marquee"/>
Tôi có một nghi ngờ nhỏ rằng những quan điểm được buộc RelativeLayout
cạnh đến cạnh cha mẹ khi họ thực hiện cuộc gọi liên kết của họ. Có ai đó biết phải làm gì để đạt được các lề này không? Hoặc có thể có một cách tốt hơn để làm điều này hoàn toàn? Được đánh giá cao.
Nếu đây là vấn đề, anh ấy sẽ nhận được ngoại lệ cho lớp học. MarginLayoutParams là một lớp siêu của LinearLayout.LayoutParams, RelativeLayout.LayoutParams và vân vân. Bên cạnh những gì setLayoutParams() thực sự làm là giữ các tham số trong một trường thành viên và gọi requestLayout() vì vậy chỉ một trong các cuộc gọi này sẽ được hapenning (hoặc requestLayout() hoặc setLayoutParams() nhưng không phải là hai với nhau) – asenovm
Entreco, bạn quay đúng là chính xác, đó là vì tôi đã tạo sai chủ sở hữu của các thông số, nhưng việc triển khai bạn đưa ra là hơi sai. Dưới đây là đoạn code mà đã kết thúc làm việc: 'LinearLayout.LayoutParams params = LinearLayout.LayoutParams mới ( \t \t \t \t LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); \t \t int tbm = AllConversationsActivity.topAndBottomMargin; \t \t int lrm = AllConversationsActivity.leftAndRightMargin; \t \t params.setMargins (tbm, lrm, tbm, lrm); \t \t setLayoutParams (params); \t \t requestLayout(); ' Cảm ơn sự giúp đỡ của bạn! – blaineh
tính năng này không hoạt động đối với tôi. Tôi đã thử điều này trong constructor LinearLayout mở rộng của tôi. Các lề không hiển thị ở tất cả không có vấn đề gì kích thước tôi cung cấp. Điều gì có thể sai? – faizal