2014-12-26 10 views
6

मैं सामग्री डिजाइन शैली आवेदन मैं AutoCompleteTextView शैली की तरह android.support.v7.internal.widget.TintEditTextAppCompat.EditText साथ स्टाइलिंग AutoCompleteTextView

में मैं अपने style.xml के लिए शैली जोड़ा शैली के लिए
बदलना चाहते हैं बनाने के

काम नहीं करता:

<style name="AppTheme" parent="AppTheme.Base"/> 
<style name="AppTheme.Base" parent="Theme.AppCompat"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextViewAppTheme</item> 
</style> 
<style name="AutoCompleteTextViewAppTheme" parent="Base.Widget.AppCompat.EditText"/> 

यह काम करता है लेकिन लाइन रंग नहीं बदलते हैं। enter image description here

भौतिक डिज़ाइन के साथ एडिटटेक्स colorControlActivated और colorControlNormal का उपयोग करने लगते हैं। इसलिए, मैंने पिछले गुण परिभाषा में इन गुणों को ओवरराइड करने का प्रयास किया है लेकिन इसका कोई प्रभाव नहीं है।
इसे काम करने के लिए मुझे क्या करना है?

उत्तर

5

इस तरह से एक्सएमएल में अपने विजेट के लिए उपयोग करने के लिए वांछित शैली को जोड़ने के लिए प्रयास करें:

<View 
style="@style/NameOfYourTheme" 
... 
/> 

है कि आप इसे अपने आप को शैली की कोशिश कर सकते काम नहीं करता है। आपको टेक्स्टव्यू विशेषताओं को बदलना होगा जिन्हें आप here देख सकते हैं। एक उदाहरण के लिए

textcolor android:textColor विशेषता है जो अपनी शैली में जोड़ा जाना चाहिए बदल रहा है, उदाहरण के लिए द्वारा बदला जा सकता है:

<style name="AutoCompleteTextViewAppTheme" parent="Base.Widget.AppCompat.EditText"/> 

<item name="android:textColor">#ffffffff</item> 
</style> 

आप edittext लाइन आप पृष्ठभूमि विशेषता बदलना होगा बदलना चाहते हैं, इस तरह से उदाहरण के लिए:

<item name ="android:background="@drawable/line_background"> </item> 

और अपने ड्रॉएबल में एक नई फ़ाइल line_background.xml जोड़ने के लिए एक समान सामग्री के साथ फ़ोल्डर:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line"> 


    <stroke 
     android:color="#c0c000" 
     android:width="3dp"></stroke> 
</shape> 
+0

textcolor विशेषता काम करता है में जोड़कर popupBackground विशेषता संभाल लेंगे है, लेकिन समस्या यह है कि मैं लाइन रंग नहीं बदल सकते है (यह स्क्रीन पर काला है) – CodeNinja

+0

मेरे हालिया संपादन –

+2

देखें जो सिर्फ मध्य के माध्यम से एक रेखा खींचता है। यह एक सामग्री रेखांकित नहीं करता है। – radley

3

मैंने इस समस्या को हल करने के लिए कस्टम टिंटवेयर ऑटोकंपलेटटेक्स्ट व्यू बनाया है।

package com.atrinax.gist; 

import android.content.Context; 
import android.support.v7.internal.widget.TintTypedArray; 
import android.util.AttributeSet; 
import android.widget.AutoCompleteTextView; 

public class TintAutoComplete extends AutoCompleteTextView { 

private static final int[] TINT_ATTRS = { 
     android.R.attr.background 
}; 

public TintAutoComplete(Context context) { 
    this(context, null); 
} 

public TintAutoComplete(Context context, AttributeSet attrs) { 
    this(context, attrs, android.R.attr.editTextStyle); 
} 

public TintAutoComplete(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 

    TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, TINT_ATTRS, 
      defStyleAttr, 0); 
    setBackgroundDrawable(a.getDrawable(0)); 
    a.recycle(); 
} 
} 

इस कक्षा को अपनी परियोजना में जोड़ें। इस तरह एक्सएमएल में उपयोग:

<com.atrinax.gist.TintAutoComplete 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" /> 

इस समाधान का नकारात्मक पहलू है कि यह आंतरिक वर्ग

android.support.v7.internal.widget.TintTypedArray 

कि बदल सकते हैं या भविष्य में उपलब्ध नहीं हो सकता है पर निर्भर करता है। कृपया डेरेक के उत्तर पर एक नज़र डालें - यह मेरे उत्तर से उत्पन्न पृष्ठभूमि के साथ एक समस्या को हल कर रहा है।

+0

के रूप में असाइन किया गया था, यह v21 पर ड्रॉपडाउन पृष्ठभूमि के लिए जिम्मेदार नहीं है जो पारदर्शी हो जाता है। मेरे परीक्षण से 4.4 और नीचे अंधेरे पृष्ठभूमि में डिफ़ॉल्ट। – Derek

+0

मुझे इस समस्या से अवगत है, लेकिन मुझे ऐसा कोई काम नहीं मिल रहा है जो सूची आइटमों के लिए अपना स्वयं का लेआउट सेट कर रहा है या एडाप्टर में दृश्य बदलकर, उदाहरण के लिए: 'if (convertView == null) { convertView = getLayoutInflater()। inflate (android.R.layout.simple_list_item_1, शून्य); कन्वर्ट View.findViewById (android.R.id.text1) .setBackgroundColor (backgroundLightColor); } ' –

+1

मुझे इसका समाधान मिला, अधिक जानकारी के लिए मेरा उत्तर देखें। इस कोड स्निपेट को साझा करने के लिए धन्यवाद, बहुत अच्छा दृष्टिकोण। – Derek

2

@ Atrinax के जवाब पर अनुमान लगाना, यहाँ एक वर्ग है कि AutoCompleteTextView विस्तार और TINT_ATTRS

public class TintAutoCompleteTextView extends AutoCompleteTextView { 

private static final int[] TINT_ATTRS = { 
     android.R.attr.background, 
     android.R.attr.popupBackground 
}; 

public TintAutoCompleteTextView(Context context) { 
    this(context, null); 
} 

public TintAutoCompleteTextView(Context context, AttributeSet attrs) { 
    this(context, attrs, android.R.attr.autoCompleteTextViewStyle); 
} 

public TintAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 

    TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, TINT_ATTRS, 
      defStyleAttr, 0); 
    setBackgroundDrawable(a.getDrawable(0)); 
    setDropDownBackgroundDrawable(a.getDrawable(1)); 
    a.recycle(); 
} 
} 
संबंधित मुद्दे