Tôi có một tùy chỉnh View
. Trong hàm khởi tạo cho khung nhìn, tôi tạo và thêm hai phần phụ. Tuy nhiên, việc sử dụng LayoutParams.addRule()
đang gây ra một số sự cố. Các quy tắc như CENTER_HORIZONTAL
làm việc, nhưng khi tôi cố gắng sử dụng ABOVE
, subview kết thúc lên với chiều cao 0.Lập trình thêm ABOVE vào LayoutParams khiến chiều cao xem là 0
Đây là mã trong constructor của tôi:
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mLayoutParams = new LayoutParams(width, height);
mLayoutParams.leftMargin = left;
mLayoutParams.topMargin = top;
mImage = new ImageView(getContext());
mImage.setImageDrawable(getResources().getDrawable(R.drawable.my_image_drawable));
mImage.setScaleType(ScaleType.FIT_XY);
mImage.setId(R.id.my_image_id);
addView(mImage, mLayoutParams);
mText = new TextView(getContext());
mText.setText(R.string.my_text);
mText.setId(R.id.my_text_id);
LayoutParams textParams = new LayoutParams(200, 40);
// textParams.addRule(CENTER_HORIZONTAL, TRUE); //Works
textParams.addRule(ABOVE, mImage.getId()); //Doesn't work
addView(mText, textParams);
Nếu tôi kiểm tra xem trên một giả lập với Device Monitor, tôi có thể thấy rằng layout_height
của văn bản là 40, nhưng các thông số trên cùng, dưới cùng và chiều cao đều là 0. measuredHeight
dường như giống với chiều rộng màn hình.
- Tôi có làm gì sai khi thêm quy tắc không?
- Có nơi nào tốt hơn để thêm quy tắc không? Có điều gì cần phải xảy ra trước?
- Bất kỳ giải pháp thay thế nào khác? Làm cho
TextView
có chiều cao FILL_PARENT, trọng lực BOTTOM và đặt lề dưới của nó thành chiều cao của hình ảnh, nhưng tôi cần có khả năng thêm một chế độ xem khác phía trên văn bản và điều này sẽ không hoạt động.
Thử thêm quy tắc cho 'Hình ảnh' của bạn là' Dưới đây' là 'TextView' của bạn. Khi mọi thứ được thêm vào 'RelativeLayout', chúng sẽ được thêm vào phía trên bên trái trừ khi được chỉ định khác. Tôi nghĩ rằng những gì có thể xảy ra là không có nơi nào trên 'Hình ảnh' của bạn cho' TextView' để đi – codeMagic
Ah, xin lỗi, tôi đã bỏ lỡ điều đó trong mã của tôi. 'mLayoutParams' có một trái, trên, chiều rộng và chiều cao được xác định. Không phải là đủ để nó biết đi đâu? @codeMagic, tôi đã cập nhật mã. – karl
Thêm 'ALIGN_BOTTOM' vào' mImage' không thay đổi bất cứ điều gì. Nếu tôi thay đổi nó thành 'BELOW' thay vào đó, tôi sẽ gặp lỗi phụ thuộc vòng tròn. Tôi muốn văn bản ở trên hình ảnh và hình ảnh có vị trí cố định. – karl