Pull to refresh

Comments 24

Ну уже б раз такое дело то зделали бы library, как например здесь.
И кстати вопрос: а если мне нужен и так уже кастомный textView (чужой) то Ваш вариант не особо «катит».
Катит, просто наследуете свой класс от чужого кастомного textView, а не просто от TextView.
Нужно просто наследовать нужный вам textView и вы получите класс с теми же конструкторами в которых можно выполнить метод создания шрифтов. Так что проблем быть не должно.
UFO landed and left these words here
Не соглашусь :-)

1. На скриншоте все пункты меню подписаны. Достаточно 1 раз прочесть. Запомнить легко, так как последовательность очень логична.
2. Любой, кто работал с Андроид студией узнает все эти меню с первого взгляда.
Я постарался сделать скрин что-бы было максимально понятно куда нажимать, по подсветке вкладок все отлично видно. По моему мнению, второй способ реально быстрее, но вы вольны делать как вам угодно :)
Как по мне, лучший способ задать кастомный шрифт — сделать это в xml через DataBinding.
https://github.com/lisawray/fontbinding

Не надо наследоваться, нет зависимости от конкретной реализации TextView, не надо каждый раз писать boilerplate
красиво, модно, но не работает для свойств из стилей и тем.
Ммм… честно говоря, совсем не понял о чем вы.
Что не работает? Установка шрифта для кастомного аттрибута?
датабиндинг работает только для атрибутов явно прописанных во вью. Вы не можете задавать шрифты в стилях или темах.
А чем не угодила библиотека https://github.com/chrisjenx/Calligraphy?
Потому что иногда так хочется написать велосипед, аж сил нет сдерживать себя :)
Лично я ее не использовал. Посмотрел по ссылке, не совсем понятно как данная библиотека кешит шрифты.
Это не самые важные проблемы. Для меня было неожиданностью следующее: 1) поддерживаются не все шрифты. Если шрифт не поддерживается, то будет использован стандартный. Проверить поддерживается ли шрифт нельзя. 2) нет поддержки файлов шрифтов с несколькими шрифтами внутри.

Вы забыли заресайклить TypedArray:


private void setFonts(AttributeSet attributeSet, Context context){
        TypedArray a = context.getTheme().obtainStyledAttributes(
                attributeSet,
                R.styleable.CustomFontsTextView,
                0, 0);
        ...
        a.recycle();  // <- Here
    }
Не совсем понимаю зачем нужно ресайклить.
Существует пул из TypedArray.
Если вы не сделаете ресайкл, системе ресурсов позже придется создать и добавить новый TypedArray в пул. Если заресайклить, то TypedArray можно будет переиспользовать.
Небольшая оптимизация по памяти.
во-первых наследоваться все же лучше от https://developer.android.com/reference/android/support/v7/widget/AppCompatTextView.html
а во-вторых вот здесь есть изящненький гайд
http://android-activities.blogspot.ru/2014/03/add-custom-behavior-to-standard-android.html
Для создания кастомных вьюшек рекомендуется использовать классы из AppCompat. В данном случаи надо было наследоваться от AppCompatTextView.
Действительно, лучше использовать AppCompatTextView.Спасибо за совет :)
На сколько мне известно, существует несколько способов применения шрифта к TextView: 1) наследование 2)проход по всей иерархии вью с поиском TextView с нужным атрибутам. 3) кастомный layoutInflaiter(как в каллиграфии) 4) датабиндинг. Неплохо было бы сравнить эти способы, говоря о шрифтах.
Вначале скажу что я разработчик со стажем Android 6 лет.
А теперь пару замечаний и как сделать правильнее.

Скажу честно, я делал как вы 4 года назад.
Ваши ошибки:
0) Зачастую в приложении используется не только TextView, а также банально Button и EditText. Судя по логике, вы будете создавать наследников и этих классов. Но, как только вам потребуется использовать какой то расширенный класс от данных (сторонние либы), то вам придется наследоваться и от них. Это плохой путь.
-Решение: Если вы создаете так называемые Support Class (ваши синглтончики) то разумнее создать метод TextUtils.setTypeface(view: TextView, font: String). Это решит проблему с множественным не нужным наследованием, так как Button и EditText являются наследниками TextView

1) Запомните, что лучше не расширять базовые классы вью без крайней необходимости! Лучше найти способы более изящные
-Решение 0: Calligraphy Lib
-Решение 1: DataBinding + BindingAdapter
-Решение 2: Kotlin + extension function
Sign up to leave a comment.

Articles