Android LayoutParams不';不适用
我今天要上科特林的课。它扩展了视图组。 这是Init函数Android LayoutParams不';不适用,android,user-interface,kotlin,Android,User Interface,Kotlin,我今天要上科特林的课。它扩展了视图组。 这是Init函数 import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.RectF import android.util.AttributeSet import android.view.View import andr
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.RectF
import android.util.AttributeSet
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import timber.log.Timber
import java.util.*
class Day: ViewGroup {
val date : Date;
val dayView: View
var color: Int = Color.TRANSPARENT
constructor(context: Context?, date: Date) : super(context) {
this.date = date
}
constructor(context: Context?, attrs: AttributeSet?, date: Date) : super(context, attrs) {
this.date = date
}
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, date: Date) : super(
context,
attrs,
defStyleAttr
) {
this.date = date
}
constructor(
context: Context?,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int,
date: Date
) : super(context, attrs, defStyleAttr, defStyleRes) {
this.date = date
}
init {
dayView = TextView(this.context)
dayView.text = "test"
dayView.visibility = View.VISIBLE
dayView.layout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
this.addView(dayView)
this.setBackgroundColor(Color.CYAN)
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
val paint = Paint();
Timber.i("on draw")
paint.strokeWidth = 5F
paint.style = Paint.Style.FILL_AND_STROKE
paint.color = this.color
val pos = IntArray(2)
this.getLocationOnScreen(pos)
canvas?.drawArc(
RectF(pos[0].toFloat() / 10, pos[1].toFloat() / 10, pos[0].toFloat() / 10 + 100, pos[1].toFloat() / 10 + 100),-90F, 180F, false, paint)
}
}
成功构建后,我将对象添加到线性布局中
val day = Day(context, Date())
this.layout.addView(day)
this.layout.requestLayout()
这就是布局的定义
<LinearLayout
android:orientation="vertical"
android:id="@+id/calendarContainer"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="0dp"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintVertical_weight="1">
问题是,onLayout函数没有像@Enselic所说的那样实现 首先,我试着自己实施布局。但有一个更简单的方法:
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
if(changed){
this.children.forEach {
//delegating the layouting to the element
it.layout(left,top,right,bottom)
}
}
}
问题是,onLayout函数没有像@Enselic所说的那样实现 首先,我试着自己实施布局。但有一个更简单的方法:
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
if(changed){
this.children.forEach {
//delegating the layouting to the element
it.layout(left,top,right,bottom)
}
}
}
请分享整个
日
课程,包括日.onLayout(…)
实现。我添加了实现。你为什么希望文本视图
可以放在任何地方?onLayout()
实现是空的,因此没有人在布置TextView
@Enselic,这正是我需要的提示!现在定位开始工作了。但是文本对齐不起作用。不知道为什么。我用实际的onLayout实现添加了一个新的答案。也许你有个暗示。哦,我会在最后实现新的onLayout。哦,我找到了解决方案。我会把它作为答案贴出来。非常感谢@Enselic你帮了我很多!请分享整个日
课程,包括日.onLayout(…)
实现。我添加了实现。你为什么希望文本视图
可以放在任何地方?onLayout()
实现是空的,因此没有人在布置TextView
@Enselic,这正是我需要的提示!现在定位开始工作了。但是文本对齐不起作用。不知道为什么。我用实际的onLayout实现添加了一个新的答案。也许你有个暗示。哦,我会在最后实现新的onLayout。哦,我找到了解决方案。我会把它作为答案贴出来。非常感谢@Enselic你帮了我很多!