2009-07-17 16 views
7

Sử dụng SDK Android, dường như không có cách nào để đặt kiểu trên hàng của bảng. Tôi muốn thực hiện tương đương:Đặt kiểu trên BảngRow trong Android

<TableRow 
    style='@style/TableRow_classic' > 

bằng mã. Tôi muốn một cái gì đó như:

TableRow row = new TableRow(this); 
row.setStyle(R.style.TableRow_classic); 

Có ai biết cách tìm điều này không?

Trả lời

3

Theo như tôi có thể biết, không có phương pháp setStyle. Bạn có thể đi qua và thiết lập từng thuộc tính riêng lẻ, nhưng điều đó đánh bại mục đích tách View của bạn khỏi logic điều khiển của bạn. Xấu.

Có ai tìm ra cách tự động gán kiểu không?

1

Tôi đang cố gắng đặt các thuộc tính kiểu được lấy từ Chủ đề của tôi bằng mã.

Lý do của tôi là tôi muốn sử dụng kiểu từ Chủ đề của riêng mình, NHƯNG Giao diện người dùng của tôi được tạo hoàn toàn bằng mã (sử dụng trình tạo bố cục tùy chỉnh), mà không xác định bất kỳ tiện ích nào trong XML. Vì vậy, tôi không thể đặt kiểu trong bố cục XML của tiện ích con - không có bố cục XML nào.

Tôi nghĩ rằng tôi sẽ có thể thiết lập phong cách này trong mã của widget của tôi bằng cách sử dụng

TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) 

Đây có vẻ như (với tôi) rằng

  1. AttributeSet set = null; vì đây là những gì các inflater XML sẽ cung cấp.

  2. int[] attrs = R.styleable.MyWidget; xác định thuộc tính tôi muốn xem.

  3. int defStyleAttr = myWidgetStyle; là tham chiếu, được xác định trong Chủ đề của tôi, theo kiểu cho MyWidget. Cả hai đều được định nghĩa trong các tệp XML trong res/values. “myWidgetStyle” theo mẫu của nhà phát triển Android đã sử dụng trong mã của họ.

  4. defStyleRes = 0; Tôi hy vọng rằng tôi không cần phải suy nghĩ về điều này.

Sau đó, để có được bất kỳ tài sản, chẳng hạn như một màu nền,

Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default); 

a.recycle(); 

này dường như làm việc -so xa anyway.

Có vẻ như hệ thống xây dựng android thuận tiện tạo chỉ mục chính xác để sử dụng trong a.getColor và đặt tên là R.styleable.MyWidget_background. Tôi đã không tạo tên này, vì vậy Android phải thực hiện nó bằng cách sử dụng XML của tôi cho MyWidget có thể tạo kiểu của tôi. Tôi mong đợi người ta có thể tìm kiếm chỉ mục chính xác bằng cách tìm kiếm TypedArray cho thuộc tính bắt buộc, nhưng điều đó sẽ không hiệu quả và TypedArray trông giống như một contraption khó chịu để giải quyết. Tôi sẽ sử dụng một cây gậy rất dài để chọc nó!

Don

12

Giải pháp tốt nhất mà tôi đã tìm thấy để thực hiện điều này là để tạo ra một "phần" bố trí đại diện cho các dòng của bảng, với một phong cách định nghĩa:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    style="@style/tr_withborder" /> 

Sau đó thổi phồng nó trong mã của bạn , sử dụng động:

TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.partial_table_row, null); 

Trong khi không lý tưởng, nó không làm việc cho tôi

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