扩展TextView不显示文本
Extending TextView does not show text
我想为我的一些 TextView
实现一个 OnLongClickListener
,但我不想在所有地方重复相同的代码,所以我想扩展 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" />
为 defStyleAttr
设置默认参数的问题是,基础 class 可能会做同样的事情来实际处理样式和状态。无论如何,您的初始化发生在 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
扩展。它向后移植了一些较新的功能。
我想为我的一些 TextView
实现一个 OnLongClickListener
,但我不想在所有地方重复相同的代码,所以我想扩展 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" />
为 defStyleAttr
设置默认参数的问题是,基础 class 可能会做同样的事情来实际处理样式和状态。无论如何,您的初始化发生在 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
扩展。它向后移植了一些较新的功能。