7

Tôi cố gắng để thiết lập chiều cao của thanh công cụ lập trình bằng cách này:bộ chiều cao Toolbar lập trình Android

toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42)); 
toolbar.setMinimumHeight(42); 

Nhưng nó gây ra ngoại lệ gây tử vong với log này ->android.widget.relativelayout$layoutparams cannot be cast to android.support.v7.Toolbar$layoutparams

tôi cũng cố gắng biến thể này:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toolbar.getLayoutParams(); 
params.height = 42; 
toolbar.setLayoutParams(params); 
toolbar.setMinimumHeight(42); 

Nó không đưa ra ngoại lệ nhưng cũng không hoạt động và thanh công cụ cao hơn mặc định theo định nghĩa của tôi. Nhưng tất nhiên thiết lập các tham số trong xml hoạt động, nhưng tôi cũng cần thiết lập chiều cao trong java.

Vì vậy, hãy giúp tôi giải quyết vấn đề.

Trả lời

10

Hãy thử điều này -

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams(); 
layoutParams.height = 42; 
mToolbar.setLayoutParams(layoutParams); 

Nó làm việc tốt cho tôi.

Nếu mã trên vẫn không hoạt động, hãy thử thêm dòng này ở cuối -

mToolbar.requestLayout(); 

Dòng trên sẽ buộc Thanh công cụ để đo lại tất cả mọi thứ. Mã của bạn có thể không hoạt động vì bạn đang cố gắng thay đổi chiều cao sau khi bố cục được tăng cao. Trong trường hợp đó, bạn cần ép buộc Chế độ xem của bạn phản hồi mọi thứ. Hãy xem các phương thức sau để biết thêm thông tin - requestLayout(), invalidate() và forceLayout(). Trong khi thay đổi LayoutParams khi di chuyển, ba phương thức này có ích nhưng với một mức giá tuyệt vời. Nếu Bố cục của bạn rất nặng và có nhiều lượt xem con trong đó, hãy gọi bất kỳ phương pháp nào trong số này sẽ ảnh hưởng đến hiệu suất của ứng dụng của bạn đặc biệt trên các thiết bị cấp thấp hơn. Vì vậy, hãy chắc chắn rằng bạn sử dụng các phương pháp này thực sự cẩn thận.

Và sự cố bạn đã đề cập xảy ra vì Thanh công cụ của bạn là chế độ xem con của chế độ xem gốc và chế độ xem gốc của bạn là RelativeLayout. Hy vọng nó giúp.

Ngoài ra, vui lòng không theo dõi câu trả lời của Silambarasan Poonguti vì nó không rõ ràng. LayoutParams là cần thiết nếu bạn đang cố gắng truy cập LayoutParams con. Ngay cả Xem có LayoutParams riêng của nó, bạn phải đưa nó vào cha mẹ hoặc gốc LayoutParams cho ex. nếu Thanh công cụ là một cái nhìn con của RelativeLayout sau đó đúc LayoutParams để Toolbar.LayoutParams sẽ sụp đổ các ứng dụng và bạn phải cast LayoutParams để RelativeLayout.LayoutParams

+0

cảm ơn bạn đã trả lời rất chính xác, nó hoạt động. – Veka

+0

Vui vì nó đã giúp. – Varundroid

+0

Tôi đã giải thích thêm một chút về cách mọi thứ hoạt động theo Chế độ xem trong Android. Hy vọng bạn sẽ thấy nó hữu ích. – Varundroid

1

Hãy thử điều này ...

Thanh công cụ có riêng LayoutParams. bạn không thể truyền nó cho RelativeLayout.

Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams(); 
    params.height = 42; 
    mToolbar.setLayoutParams(params); 

Nếu bạn muốn thiết lập chiều cao của thanh công cụ ở thời gian chạy chỉ cần làm như thế này,

int expected_height = your value; 
    mToolbar.setMinimumHeight(expected_height); 

Chúc mừng mã hóa ...

+0

Cảm ơn bạn đã trả lời, tôi cũng đã thử mã đó, nhưng nó cũng có cùng ngoại lệ.Ngoài ra setMinimumHeight không phải là ngay cả trong trường hợp chiều cao tối thiểu nhỏ nó nhận được chiều cao tối thiểu mặc định của thanh công cụ – Veka

+0

Đây không phải là cách LayoutParams hoạt động. Ngay cả Xem có LayoutParams riêng của nó, bạn phải đưa nó vào cha mẹ hoặc gốc LayoutParams cho ex. nếu Thanh công cụ của bạn là chế độ xem con của RelativeLayout thì hãy đưa LayoutParams vào Toolbar.LayoutParams sẽ làm hỏng ứng dụng và bạn phải truyền LayoutParams thành RelativeLayout.LayoutParams – Varundroid

0

Để tránh lỗi này bạn cần phải sử dụng ViewGroup.LayoutParams, vì android.support.v7.Toolbar làm việc với nó và trả lại nó trên mToolbar.getLayoutParams().

Các vấn đề liên quan