您好。我是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