2016-01-16 9 views
8

Tôi hiện đang có một tập tin bool.xml trong android mà trông như thế này:databinding Android - làm thế nào để sử dụng tài nguyên bool để kích hoạt tầm nhìn của bố trí

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<bool name="showAds">true</bool> 
    </resources> 

Bây giờ tôi có một tập tin Layout.xml trong đó sử dụng liên kết dữ liệu. Tôi muốn hiển thị hoặc ẩn độ nhớt của một quảng cáo dựa trên một quảng cáo hiển thị boolean được định nghĩa ở trên. Cho đến nay tôi có điều này:

<com.google.android.gms.ads.AdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
android:visibility="@{@bool/showAds ? View.Visible:View:gone}" 
     ads:adSize="BANNER" 
     ads:adUnitId="ca-app-pub-1234567/34343"> 

nhưng không biên dịch. làm thế nào tôi có thể nhận được boolean để quyết định nếu quảng cáo nên hiển thị hay không? Cú pháp là sai.

Trả lời

23

Sửa cú pháp của tình trạng View.Visible: Xem: đi

android:visibility="@{@bool/showAds ? View.VISIBLE:View.GONE}" 

và bạn cần phải nhập khẩu Xem trong phần dữ liệu:

<data> 
    <import type="android.view.View"/> 
</data> 
+0

thể này ' 'được tag tìm thấy ở đâu? – wutzebaer

+0

@wutzebaer Bạn tạo thẻ dữ liệu được lồng trong thẻ của bạn. Xem thiết lập ràng buộc dữ liệu tại đây; https://developer.android.com/topic/libraries/data-binding/index.html – opt05

+0

hi biểu thức có vẻ không hoạt động ngay cả khi tôi chuyển giá trị đã chuyển trực tiếp 'android: visibility =" @ {0x00000008} "' xem vẫn không đi – wutzebaer

11

Nếu bạn không thích thêm Xem nhập (trong mỗi bố cục khi cần), bạn có thể chỉ cần xác định phương thức chú thích @BindingConversion:

@BindingConversion 
public static int convertBooleanToVisibility(boolean visible) { 
    return visible ? View.VISIBLE : View.GONE; 
} 

Phương thức chú thích có thể nằm trong bất kỳ tệp Java nào trong dự án của bạn.

Sau đó, bạn chỉ có thể sử dụng

android:visibility="@{@bool/showAds}" 
+0

Bạn có biết cách tạo hai trong số này không? Một lựa chọn giữa hiển thị và biến mất. Loại khác chọn giữa hiển thị và ẩn. – bboybz

+0

Câu hỏi hay. Tôi không nghĩ rằng nó có thể làm việc bằng cách sử dụng android bình thường: khả năng hiển thị vì tôi sẽ không biết làm thế nào nó có thể biết được chuyển đổi để chọn – Till

+0

Khi một BindingConversion hoặc BindingMethod có vẻ hơi hạn chế, sử dụng một BindingAdapter. Bạn có thể tạo các thuộc tính của riêng bạn. Ví dụ: Sử dụng 'android: visibility' với BindingConversion để hiển thị/biến mất và' android: invisible' làm BindingAdapter nơi bạn thực sự thực hiện 'view.setVisibility (theBoolean);' –

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