2014-12-26 20 views
6

Ben benim style.xml stil eklendiAppCompat.EditText ile Şekillendirme AutoCompleteTextView

android.support.v7.internal.widget.TintEditText gibi stiline AutoCompleteTextView stile
değiştirmek istediğiniz malzeme tasarımı stil uygulamayı

yapmak çalışmaz:

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

Bu çalışır, ancak çizgi renkleri değişmez. Malzeme tasarımlı EditTexts, colorControlActivated ve colorControlNormal gibi görünüyor. Bu nedenle, bu özellikleri önceki stil tanımında geçersiz kılmaya çalıştım ama hiçbir etkisi yok.
Çalışması için ne yapmalıyım?

cevap

5

xml Widget'ınızın bu şekilde kullanmak istenen stil eklemek için deneyin:

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

o bunu kendiniz stil deneyebilirsiniz işe yaramazsa. here'a bakabileceğiniz TextView niteliklerini değiştirmeniz gerekecektir. Bir örneği için

textColor örneğin, stil eklenmelidir android:textColor niteliğini değiştirerek değiştirilebilir:

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

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

Eğer arka plan niteliğini değiştirmek zorunda EditText hattını değiştirmek isterseniz, Bu şekilde örneğin: sizin drawables içinde

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

Ve yeni bir dosya line_background.xml eklemek benzer bir içeriğe sahip klasörü:

<?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 nitelik çalışır ekleyerek popupBackground niteliğini idare edecek bir sınıf var, Atrinax cevabı @ üzerinde tahmin etmek için, ama sorun ben çizgi renklerini değiştirmek edemezler – CodeNinja

+0

Son düzenlemelerime bakın –

+2

Sadece ortada bir çizgi çiziyor. Materyal altını çizmez. – radley

3

Bu sorunu çözmek için özel Tint Aware AutoCompleteTextView oluşturdum.

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(); 
} 
} 

Bu sınıfı projenize ekleyin. Böyle xml Kullanım: Bu çözümün

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

Olumsuz iç sınıfın değiştirmek veya gelecekte kullanılamaz duruma gelebilir

android.support.v7.internal.widget.TintTypedArray 

dayanıyor olmasıdır. Lütfen Derek'in cevabına bir göz atın - cevabımdan kaynaklanan bir arka planla ilgili bir problemi çözüyor. (

+0

olarak atanmıştı. Bu, v21'deki açılır arka plan için geçerli değil. şeffaf hale gelir. Testlerimden 4.4 ve altındaki varsayılan değerler koyu arka plana. – Derek

+0

Bu sorunun farkındayım, ancak liste öğeleri için kendi düzeninizi ayarlayan veya bağdaştırıcıdaki görünümü değiştirerek bunun gibi bir geçici çözüm bulamıyorum, örneğin: 'if (convertView == null) { convertView = getLayoutInflater(). şişir (android.R.layout.simple_list_item_1, null); convertView.findViewById (android.R.id.text1) .setBackgroundColor (backgroundLightColor); } ' –

+1

Bunun için bir çözüm buldum, daha fazla bilgi için cevabımı bakın. Bu kod snippet'ini paylaştığınız için teşekkürler, çok havalı bir yaklaşım. – Derek

2

burada AutoCompleteTextView genişletme ve 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(); 
} 
} 
İlgili konular