#android
Вопрос:
Я создал простой пользовательский вид , который был расширен TextView
, в Android Studio я получаю этот wanrning
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.
мой пользовательский класс:
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);
}
}
как я могу решить эту проблему?
Комментарии:
1.
extend android.support.v7.widget.AppCompatTextView
это то же самое, что и TextView . AppCompatTextView используется для обеспечения обратной совместимости новых функций со старыми версиями Android.2. это не проблема, вы можете продлить все, что захотите. Android Studio предупреждает вас только о том, что AppCompatTextView больше подходит для использования в целях совместимости.
3. код все равно будет выполняться…. это только предупреждение
4. включена ли привязка данных ?
Ответ №1:
ОБНОВЛЕНИЕ: Если вы используете библиотеки androidx вместо (устаревших) библиотек поддержки v7 (что вам следует сделать сейчас…), пожалуйста, используйте это вместо:
import androidx.appcompat.widget.AppCompatTextView;
СТАРЫЙ ОТВЕТ: (все еще полезно, если вы еще не перешли на androidx…)
Это пользовательское представление должно расширить android.support.v7.widget.AppCompatTextView вместо
Это Warning
, а не Ошибка.
Вместо
public class FontAwesome extends TextView
Вы должны использовать AppCompatTextView
public class FontAwesome extends AppCompatTextView
Комментарии:
1. Почему? Не могли бы вы, пожалуйста, объяснить, почему одно хорошо, а другое нет.
2. Итак, если нам не нужны ни фоновый рисунок, ни функция автоматического изменения размера, мы все равно можем расширить пользовательский вид из TextView, верно?
3. @KimiChiu Да, но лучше использовать AppCompatTextView, чтобы, если вы решите опубликовать представление в Интернете или захотите использовать какие-либо новые атрибуты
Ответ №2:
У меня была похожая проблема, но она исправлена. Вероятно, вы видите результат только во время выполнения в первый раз. Я не тестировал, чтобы снова перестроить проект, не запустив приложение.
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);
}
}