2010-10-17 25 views
17

मेरे ऐप के उपयोगकर्ता को एक संकेत है कि वर्तमान में किस क्षेत्र में फोकस है, मैं वर्तमान स्थिति के आधार पर अपने कुछ क्षेत्रों के पृष्ठभूमि रंग को बदलने की कोशिश कर रहा हूं, हालांकि, मुझे एंड्रॉइड रंग राज्य सूची संसाधनों को समझने में परेशानी हो रही है:रंग राज्य सूची संसाधनों में पृष्ठभूमि रंग कैसे निर्दिष्ट करें?

मैं उदाहरण पाया (क्षमा करें, URL अब काम करता है) और अगर मैं कोशिश बिल्कुल एक ही है, यानी अगर मैं textcolor अनुकूल करने के लिए चाहते हैं, बातें काम करते हैं। हालांकि, अगर मैं केवल थोड़ा अलग चीज का प्रयास करता हूं, अर्थात् पृष्ठभूमि रंग को अनुकूलित करने के लिए, चीजें काम नहीं करते हैं और मुझे समझ में नहीं आता क्यों? यह इतना असंगत क्यों है ???

यह समझने में आसान बनाने के लिए कि मैं क्या करने की कोशिश कर रहा हूं, मैं अपनी विविधता को जोड़ता हूं। .xml फ़ाइलें:

AndroidManifest.xml फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="mmo.android.test" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".Test" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Test-Activity:

package mmo.android.test; 

import android.app.Activity; 
import android.os.Bundle; 

public class Test extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="hello">Hello World, Test!</string> 
    <string name="app_name">Test</string> 
</resources> 

res/color/button_test_color.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="#f0f"/> <!-- pressed --> 
    <item android:state_focused="true" android:color="#ff0"/> <!-- focused --> 
    <item android:color="#000"/> <!-- default --> 
</selector> 

और अंत में मेरी res/layout/main.xml फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="foobar" 
     android:textColor="@color/button_test_color" 
     android:background="#f00" 
    /> 
    <!-- 
    <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="foobar" 
     android:textColor="#f00" 
     android:background="@color/button_test_color" 
    /> 
    --> 
</LinearLayout> 

अगर मैं इस तरह यहाँ दिखाया गया, यह काम करता है चलाने के लिए, यानी मैं एक बटन जिसका पाठ रंग बटन केंद्रित है जो इस पर निर्भर परिवर्तन, दबाया मिलता है, आदि

अगर मैं कम बटन है, जहां मैं सिर्फ textcolor और पृष्ठभूमि मैं एक अपवाद मिल के लिए विशेषता मान फ़्लिप uncomment करते हुए कहा

... <item> tag requires a 'drawable' attribute or child tag defining a drawable 

मैं यहाँ क्या बिल्ली खो रहा हूँ? वह रंग स्थिति सूची टेक्स्ट रंग के रूप में स्वीकार्य क्यों है लेकिन पृष्ठभूमि रंग के रूप में नहीं? दृश्य के राज्य के आधार पर कोई दृश्य के पृष्ठभूमि रंग को कैसे निर्दिष्ट करता है?

उत्तर

0

एक drawable के रूप में textcolor को परिभाषित करने, बल्कि एक रंग से प्रयास करें:

android:textColor="@drawable/button_test_color" 

संसाधन श्रेणियों संसाधनों की कि वे किस प्रकार कर रहे हैं, फ़ोल्डर वे में स्थित हैं का नाम नहीं पर आधारित हैं की एक्सएमएल फाइल। फॉर्म button_test_color.xml को आम तौर पर "ड्रॉइंग" के रूप में संदर्भित किया जाता है - मैं वास्तव में आश्चर्यचकित हूं "रंग" बिल्कुल काम करता है!

+2

अधिक inf। एक खींचने योग्य संसाधन का उपयोग करने पर, यह [प्रश्न पहले पूछा गया है] (http://stackoverflow.com/questions/3506319/android-linearlayout-with-color-resource-what-am-i-doing-wrong)। – frayser

+6

मुझे नहीं पता कि यह जवाब सही क्यों चिह्नित किया गया है। ऐसा लगता है कि प्रश्नकर्ता [एंड्रॉइड डॉक्स] (http://developer.android.com/guide/topics/resources/color-list-resource.html) का पालन करता है जो इंगित करता है कि @color को xml फ़ाइल के साथ ठीक काम करना चाहिए res/color निर्देशिका और फ़ाइल नाम से संदर्भित है। – JulianSymes

+0

मैं और भी हैरान हूं कि यह चुना गया जवाब था जब यह सभी पर काम नहीं करता है। -1 – Sotti

53

मुझे यह सही समस्या थी। मुझे लगता है कि android:background रंग राज्य सूची के साथ काम नहीं करता है। इसके बजाय मुझे राज्य सूची ड्रायबल बनाकर इसके आसपास मिल गया (अलग-अलग रंगों को राज्य सूची में ड्रॉबल्स के रूप में उपयोग किया जा सकता है)।

अपने उदाहरण का उपयोग करने के लिए, एक फ़ाइल res/drawable/button_test_background.xml बनाएँ:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/pressed_color"/> 
    <item android:state_focused="true" android:drawable="@color/focused_color"/> 
    <item android:drawable="@color/default_color"/> 
</selector> 

नोट android:drawable बजाय android:color का उपयोग। एंड्रॉइड रंग संसाधन का उपयोग करेगा और इससे बाहर निकालने योग्य होगा। इस खत्म बंद करने के लिए, आप अपने res/values/colors.xml फाइल करने के लिए रंग संसाधनों को जोड़ने की जरूरत है:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    ... 
    <color name="pressed_color">#f0f</color> 
    <color name="focused_color">#ff0</color> 
    <color name="default_color">#000</color> 
    ... 
</resources> 

फिर आप इस drawable @drawable/button_test_background@color/button_test_color के बजाय का उपयोग कर को उल्लेख करता है।

तो, संक्षेप में, रंग राज्य सूची android:textColor के लिए ठीक काम करती है, लेकिन android:background के लिए राज्य सूची ड्रायबल विधि की आवश्यकता है।

+0

+1 - यह पूरी तरह से काम करता है। :) –

+5

यह स्वीकार्य उत्तर होना चाहिए। – Sotti

+0

परेशान। हालांकि मेरे संदेह की पुष्टि के लिए धन्यवाद – Mark

संबंधित मुद्दे