2016-10-20 24 views
8

Tôi muốn tạo Chế độ xem tùy chỉnh chỉ là trình bao bọc của một số Chế độ xem Android. Tôi đã xem xét việc tạo một ViewGroup tùy chỉnh quản lý bố cục của chế độ xem con, nhưng tôi không cần sự phức tạp như vậy. Những gì tôi về cơ bản muốn làm là một cái gì đó như:Tạo lớp Chế độ xem/Chế độ xem tùy chỉnh trong Anko DSL

class MainActivity 
verticalLayout { 
    textView { 
    text = "Something that comes above the swipe" 
    } 
    swipeLayout { 
    } 
} 

class SwipeLayout 
linearLayout { 
    textView { 
    text = "Some text" 
    } 
    textView { 
    text = "Another text" 
    } 
} 

Lý do là tôi muốn di chuyển mã SwipeLayout thành một file riêng biệt nhưng không muốn làm bất cứ thứ bố trí phức tạp bản thân mình. Điều này có thể sử dụng Anko không?

Chỉnh sửa: Như được đề xuất, Is it possible to reuse a layout in Kotlin Anko giải quyết vấn đề này nếu chế độ xem là bố cục gốc. Nhưng như trong ví dụ này, tôi muốn bao gồm điều này trong một bố cục khác. Điều đó có thể không?

+3

có thể trùng lặp của [Có thể tái sử dụng một cách bố trí trong Kotlin Anko] (http://stackoverflow.com/questions/40076956/is-it-possible-to-reuse- a-layout-in-kotlin-anko) – miensol

+1

Tôi đồng ý với @miensol. Vui lòng tham khảo câu trả lời này: http://stackoverflow.com/a/40078650/4568679 – Slav

+1

Tôi xin lỗi. Điều này sẽ ổn thôi. Nhưng nếu tôi không muốn chế độ xem tùy chỉnh của mình là bố cục gốc? Giống như trong ví dụ tôi đã trình bày, nó được đưa vào một bố cục khác. Khi tôi cố gắng làm điều đó, tôi nhận được một 'java.lang.IllegalStateException: View đã được thiết lập: org.jetbrains.anko._LinearLayout {8bdb786 V.E ...... ...... I. 0,0-0,0} ' –

Trả lời

1

tôi đang tìm kiếm một cái gì đó như thế này quá, nhưng giải pháp tối ưu nhất tôi tìm thấy cho quan điểm tùy chỉnh là một cái gì đó như thế này:

public inline fun ViewManager.customLayout(theme: Int = 0) = customLayout(theme) {} 
public inline fun ViewManager.customLayout(theme: Int = 0, init: CustomLayout.() -> Unit) = ankoView({ CustomLayout(it) }, theme, init) 

class CustomLayout(c: Context) : LinearLayout(c) { 
    init { 
     addView(textView("Some text")) 
     addView(textView("Other text")) 
    } 
} 
2

bạn có thể sử dụng ViewManager.

fun ViewManager.swipeLayout() = linearLayout { 
    textView { 
    text = "Some text" 
    } 
    textView { 
    text = "Another text" 
    } 
} 

class MainActivity 
    verticalLayout { 
    textView { 
     text = "Something that comes above the swipe" 
    } 
    swipeLayout {} 
} 
Các vấn đề liên quan