Расширение TextView не показывает текст - PullRequest
0 голосов
/ 21 мая 2019

Я хочу реализовать OnLongClickListener для некоторых из моих TextView с, но я не хочу повторять один и тот же код везде, поэтому я хочу расширить TextView и реализовать OnLongClickListener только один раз.

class LongClickToCopyTextView : TextView {

    constructor(context: Context) : this(context, null, 0)
    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    init {
        setOnLongClickListener {
            val clipboard = context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?
            val clip = ClipData.newPlainText(context?.packageName, text)
            clipboard?.primaryClip = clip
            true
        }
    }
}

Реализация прослушивателя используется для копирования текста TextView в буфер обмена, когда пользователь долго нажимает на него.

Проблема в том, что текст настраиваемого TextView не отображается. Но если я использую обычный TextView, текст отображается правильно.

XML

<com.dzboot.myips.custom.LongClickToCopyTextView
     android:id="@+id/simNumber"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textSize="14sp"
     android:text="00"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintTop_toTopOf="parent" />

1 Ответ

1 голос
/ 21 мая 2019

Проблема с установкой параметров по умолчанию для defStyleAttr заключается в том, что базовый класс может делать то же самое для обработки стилей и состояний.Ваша инициализация в любом случае происходит в init {}.

class LongClickToCopyTextView : TextView {
    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    init {
        setOnLongClickListener {
            val clipboard = context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?
            val clip = ClipData.newPlainText(context?.packageName, text)
            clipboard?.primaryClip = clip
            true
        }
    }
}

Также вы можете вместо этого расширить AppCompatTextView.У него есть несколько новых функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...