Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android LayoutParams不';不适用_Android_User Interface_Kotlin - Fatal编程技术网

Android LayoutParams不';不适用

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

我今天要上科特林的课。它扩展了视图组。 这是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 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你帮了我很多!