Android自定义视图应该扩展AppCompatTextView

时间:2017-04-06 05:23:06

标签: android

我创建了简单的自定义视图,该视图从TextView扩展而来,在Android Studio中我得到了这个徘徊

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

我不能使用clickable财产,例如:

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

我收到clickable财产的错误:

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

我的自定义类:

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:17)

更新:如果您使用 androidx库而不是(旧版)v7支持库(,您现在应该这样做... < / em>),请改用:

import androidx.appcompat.widget.AppCompatTextView;

OLD ANSWER:(如果你尚未迁移到androidx仍然有用......)

  

此自定义视图应该扩展   而是替代

android.support.v7.widget.AppCompatTextView

这是Warning,而不是错误。

而不是

public class FontAwesome extends TextView

您应该使用AppCompatTextView

public class FontAwesome extends AppCompatTextView 

答案 1 :(得分:0)

我也遇到过类似的问题,但它已解决。可能您是第一次只在执行时看到结果。在没有启动应用程序的情况下,我没有测试过重新构建项目。

 import android.content.Context;
    import android.graphics.Color;
    import android.support.v7.widget.AppCompatTextView;
    import android.util.AttributeSet;

    public class CustomTxtView extends AppCompatTextView {


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

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

    public CustomTxtView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    private void init(){
        setText("Hello World");
        setTextColor(Color.RED);
    }
}