2009-07-17 7 views
7

एंड्रॉइड एसडीके का उपयोग करके, स्टाइल को टेबल पंक्ति पर सेट करने का कोई तरीका नहीं प्रतीत होता है। मैं इसके बराबर करना चाहता हूं:एंड्रॉइड में टेबलरो पर सेट स्टाइल

<TableRow 
    style='@style/TableRow_classic' > 

कोड में। मुझे कुछ पसंद आएगा:

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

क्या कोई यह जानता है कि यह कैसे ढूंढें?

उत्तर

3

जहां तक ​​मैं कह सकता हूं, कोई सेट स्टाइल विधि नहीं है। आप प्रत्येक व्यक्तिगत संपत्ति के माध्यम से जा सकते हैं और सेट कर सकते हैं, लेकिन यह आपके कंट्रोलर तर्क से अपना दृश्य अलग करने के उद्देश्य को हरा देता है। खराब।

क्या किसी ने यह पता लगाया है कि शैलियों को गतिशील रूप से कैसे असाइन किया जाए?

1

मैं कोड में अपनी थीम से प्राप्त शैली गुणों को सेट करने के लिए खुद को कोशिश कर रहा हूं।

मेरा कारण यह है कि मैं अपनी थीम से एक शैली का उपयोग करना चाहता हूं, लेकिन मेरा यूजर इंटरफेस लेआउट एक्सएमएल में किसी भी विजेट को परिभाषित किए बिना कोड (कस्टम लेआउट बिल्डर का उपयोग करके) में पूरी तरह से उत्पन्न होता है। तो मैं अपने विजेट के एक्सएमएल लेआउट में एक शैली सेट नहीं कर सकता - कोई एक्सएमएल लेआउट नहीं है।

मैं सोच रहा हूँ कि मैं इसे (मेरे लिए) लगता है कि

  1. AttributeSet set = null; क्योंकि यह है

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

    यहाँ का उपयोग करके अपनी विजेट के कोड में इस शैली स्थापित करने के लिए सक्षम हो जाएगा एक्सएमएल inflater क्या प्रदान किया होगा।

  2. int[] attrs = R.styleable.MyWidget; परिभाषित करता है कि मैं कौन से विशेषताओं को देखना चाहता हूं।

  3. int defStyleAttr = myWidgetStyle; जो मेरी थीम में परिभाषित एक संदर्भ है, MyWidget की शैली में। ये दोनों एक्सएमएल फाइलों में res/values ​​में परिभाषित हैं। "myWidgetStyle" एंड्रॉइड डेवलपर्स के नाम के पैटर्न का पालन करता है जो उनके कोड में उपयोग किया जाता है।

  4. defStyleRes = 0; मुझे उम्मीद है कि मुझे इसके बारे में सोचने की आवश्यकता नहीं है।

तो इस तरह के एक पृष्ठभूमि रंग के रूप में, किसी भी संपत्ति प्राप्त करने के लिए,

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

a.recycle(); 

यह वैसे भी, ताकि अब तक काम करने के लिए प्रतीत होता है।

ऐसा लगता है कि एंड्रॉइड बिल्ड सिस्टम आसानी से एक .getColor में उपयोग करने के लिए सही इंडेक्स उत्पन्न करता है, और इसे R.styleable.MyWidget_background नाम देता है। मैंने यह नाम नहीं बनाया है, इसलिए एंड्रॉइड ने अपने स्टाइल करने योग्य MyWidget के लिए अपने एक्सएमएल का उपयोग करके इसे किया होगा।

मुझे उम्मीद है कि कोई आवश्यक विशेषता के लिए टाइपेडएरे को खोजकर सही इंडेक्स देख सकता है, लेकिन यह अक्षम होगा और टाइपेडएरे से निपटने के लिए एक अप्रिय कॉन्ट्रैक्शन की तरह दिखता है। मैं इसे रोकने के लिए एक बहुत लंबी छड़ी का उपयोग करेंगे!

डॉन

12

सबसे अच्छा समाधान मैं पूरा करने के लिए यह एक "आंशिक" लेआउट तालिका पंक्ति का प्रतिनिधित्व बनाने के लिए है मिल गया है, एक शैली के साथ परिभाषित:

<?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" /> 

फिर इसे अपने कोड में बढ़ , गतिशील रूप से उपयोग करने के लिए:

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

जबकि आदर्श है, यह काम करने के लिए मुझे

करता है
संबंधित मुद्दे