有没有一种方法可以在Android Kotlin中以编程方式在视图之间留出一个空白



您好。我是android开发的新手,我很难在kotlin文件中为我的视图设置余量。

我试过所有看过的导游,但似乎都不管用。

有人会花点时间检查我的代码吗?

我试图实现的是在一个";对于循环";,我想创建一个内部有文本视图的卡片视图,并将其添加到线性布局中,同时为每个卡片视图添加一些边距。

这是我的代码:

package com.fangs.number_sorter_app
import android.app.ActionBar
import android.graphics.Color
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView
class NumberSorterActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_number_sorter)


}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
val size = NumberHolder.getSize()
val listOfNumbersLayout = findViewById<LinearLayout>(R.id.ll_list_of_numbers)

for (item in 1..size!!) {
val newCardView = CardView(this)
newCardView.foregroundGravity = Gravity.CENTER_HORIZONTAL
newCardView.setCardBackgroundColor(Color.parseColor("#FF6200EE"))
val text = TextView(this)
text.gravity = Gravity.CENTER
text.text = "test"
text.setTextColor(Color.WHITE)
newCardView.addView(text)
listOfNumbersLayout.addView(newCardView,100,100)
}
}
}

谢谢你,希望你做得很好。

编辑时间:我只想添加我所做的代码更改:


import android.app.ActionBar
import android.graphics.Color
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.cardview.widget.CardView
class NumberSorterActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_number_sorter)
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
val size = NumberHolder.getSize()
val listOfNumbersLayout = findViewById<LinearLayout>(R.id.ll_list_of_numbers)

for (item in 1..size!!) {
val newCardView = CardView(this)
newCardView.foregroundGravity = Gravity.CENTER_HORIZONTAL
newCardView.setCardBackgroundColor(Color.parseColor("#FF6200EE"))
val text = TextView(this)
text.gravity = Gravity.CENTER
text.text = "test"
text.setTextColor(Color.WHITE)
newCardView.addView(text)
//get layout of newCardView
val params = newCardView.layoutParams as ViewGroup.MarginLayoutParams
params.setMargins(10,10,10,10)
//apply params
newCardView.layoutParams = params
listOfNumbersLayout.addView(newCardView,100,100)
}
}
}

我一直有这个错误:

java.lang.NullPointerException: null cannot be cast to non-null type android.view.ViewGroup.MarginLayoutParams
at com.fangs.number_sorter_app.NumberSorterActivity.onWindowFocusChanged(NumberSorterActivity.kt:42)
at androidx.appcompat.view.WindowCallbackWrapper.onWindowFocusChanged(WindowCallbackWrapper.java:124)

这一行是失败的:

val params = newCardView.layoutParams as ViewGroup.MarginLayoutParams

这是因为newCardView.layoutParams正在返回null。将null向下转换为ViewGroup.MarginLayoutParams的尝试导致了您的错误。

您需要首先创建布局参数,然后设置它们:

val layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONENT)
layoutParams.setMargins(0, 0, 0, 0)
newCardView.layoutParams = layoutParams

最新更新