2017-04-06 15 views
11

stworzyłem prosty widok niestandardowy którym przedłużony od TextView w Android Studio i ten wanrningAndroid niestandardowy widok powinien wystawać AppCompatTextView

This custom view should extend android.support.v7.widget.AppCompatTextView instead 

i nie mogę używać clickable propertise, na przykład:

<com.myapp.test.Widgets.FontAwesome 
     android:layout_width="60dp" 
     android:layout_height="match_parent" 
     android:layout_marginRight="5dp" 
     android:background="?selectableItemBackground" 
     android:gravity="center" 
     android:clickable="@{()->presenter.clickOnSend()}" 
     android:text="@string/font_icon_post_message" 
     android:textColor="@color/gray_text_color" 
     android:textSize="40sp"/> 

ja dostać ten błąd dla clickable propertise:

Error:(91, 46) Cannot find the setter for attribute 'android:clickable' with parameter type lambda on com.myapp.test.Widgets.FontAwesome. 

enter image description here

mój zwyczaj klasa:

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class FontAwesome extends TextView { 
    public FontAwesome(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public FontAwesome(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public FontAwesome(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
       "fonts/fontawesome.ttf"); 
     setTypeface(tf); 
    } 
} 

jak mogę rozwiązać ten problem?

+0

'przedłużyć android.support.v7.widget.AppCompatTextView' jest tak samo jak TextView. Zastosowanie AppCompatTextView do zapewnienia kompatybilności wstecznej nowych funkcji ze starszymi wersjami Androida. –

+0

thois nie jest problemem, możesz rozszerzyć to, co chcesz. Android Studio ostrzega tylko, że AppCompatTextView jest bardziej odpowiedni do użycia w celu zapewnienia zgodności. –

+0

kod nadal będzie działał .... jest tylko ostrzeżenie – rafsanahmad007

Odpowiedz

7

Zwyczaj ten widok powinien wystawać android.support.v7.widget.AppCompatTextView zamiast

Jest to Warning. Nie błąd. Będzie lepiej, jeśli użyjesz AppCompatTextView zamiast TextView.

Nie

public class FontAwesome extends TextView 

dobre podejście

Należy używać AppCompatTextView

public class FontAwesome extends AppCompatTextView 
+11

Dlaczego? Czy możesz wyjaśnić, dlaczego jeden jest dobry, a drugi nie. – shadox

+4

W celu obsługi funkcji, takich jak barwienie, biblioteka AppCompat automatycznie ładuje specjalne zamienniki AppCompat dla wbudowanych widgetów. Nie działa to jednak w przypadku własnych widoków niestandardowych. Zamiast rozszerzać klasy Android.widget bezpośrednio, powinieneś zamiast tego rozszerzyć jedną z klas delegatów w android.support.v7.widget.Appcompat –

+8

@Sachin, może przeczytać to samo z ostrzeżenia –

Powiązane problemy