Tôi không thể lấy các phần tử của mình, ví dụ: ListView
, để đổi kích thước chính xác.Cách đặt kích thước và bố cục trong onSizeChanged?
Tôi đã nhận được ListActivity
để tìm kiếm, với trang tổng quan, hộp chỉnh sửa và chế độ xem danh sách. Ý tưởng là để ẩn thanh hành động trong khi bàn phím đang hiển thị.
tôi mở rộng LinearLayout
, để nghe xem các thay đổi kích thước (theo khuyến cáo here):
public class SizeChangingLinearLayout extends LinearLayout {
//...
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
View actionbar = mainView.findViewById(R.id.actionbar);
if (yNew > yOld)
actionbar.setVisibility(View.VISIBLE);
else if (yNew < yOld)
actionbar.setVisibility(View.GONE);
super.onSizeChanged(xNew, yNew, xOld, yOld);
}
}
Các ẩn/hiển thị của actionbar việc như mong đợi nhưng có một khoảng cách dưới ListView
của cùng một chiều cao như thanh tác vụ ẩn. Ngay sau khi bất kỳ thay đổi đồ họa nào (ví dụ: viết trong hộp chỉnh sửa), ListView
sẽ lấp đầy khoảng trống. Một hành vi tương tự xuất hiện ngược lại, khi ẩn bàn phím.
[Chỉnh sửa]
Vấn đề tương tự cũng xuất hiện trong việc thay đổi cách bố trí khác. Thay đổi Visibility
những thứ trong onSizeChanged
hiển thị trực tiếp, nhưng thay đổi kích thước và lề không hiển thị cho đến khi một số hành động người dùng khác vẽ lại các chế độ xem đó. Việc vô hiệu không hoạt động từ onSizeChanged
.
[/ Chỉnh sửa]
Tôi đã cố gắng để làm mới đồ họa theo:
invalidate
-ing cả tùy chỉnh LinearLayout vàListView
(như khuyến here)notifyDataSetChanged
trên danh sách của bộ chuyển đổiforceLayout
... và hơn thế nữa, không thành công. Tại sao ListView
không thay đổi kích thước lúc đầu? Tôi có phải ghi đè onLayout
trong LinearLayout mở rộng của mình không? Tôi đã bỏ lỡ điều gì?
Không bất kỳ bản cập nhật hoạt động, tôi nhận thấy. "Ngay sau khi thay đổi đồ họa", tôi đã viết. Nhưng ví dụ một cửa sổ bật lên sẽ không thực hiện các thay đổi được hiển thị. Tôi đoán các yếu tố phải được vô hiệu hóa, nhưng họ không. – JOG
Sự cố cũng xuất hiện cho tất cả thay đổi bố cục, ví dụ: thay đổi lề của EditText. Tuy nhiên, các phần tử bố cục _adding_, ví dụ: một nút ở bên phải hộp, hiển thị ngay lập tức. – JOG