在Kotlin中的片段上的textView上设置边距

时间:2019-07-09 20:21:03

标签: android-fragments kotlin textview margins

我正在尝试在片段中的kotlin中创建TextVIew页边距。由于某些原因,参数为空,并且在执行片段时程序崩溃。

打印实际的文本是可行的,只是当我尝试创建页边距时,它是行不通的。我尝试过放置安全的null检查以允许使用null,但最终以null异常结束。

val textView = TextView(activity)
textView.text = "Overall Rating: $overall_rating\n$comments  \n" +
    " Will live again: $willLiveAgain\nTimestamp: ${timestamp.toDate()}\n"

var params = textView.layoutParams as? LinearLayout.LayoutParams
params?.setMargins(48,10,48,10)
textView.id=1
textView.layoutParams = params  //nullpointer exception
  

2019-07-08 23:50:26.021 2332-2332 / com.example.cribb E / AndroidRuntime:   致命异常:主要       流程:com.example.cribb,PID:2332       java.lang.NullPointerException:布局参数不能为null           在android.view.View.setLayoutParams(View.java:16088)           在com.example.cribb.DisplayListingFragment $ showReviews $ 1.onSuccess(DisplayListingFragment.kt:95)           在com.example.cribb.DisplayListingFragment $ showReviews $ 1.onSuccess(DisplayListingFragment.kt:32)           在com.google.android.gms.tasks.zzn.run(未知来源:4)           在android.os.Handler.handleCallback(Handler.java:873)           在android.os.Handler.dispatchMessage(Handler.java:99)           在android.os.Looper.loop(Looper.java:193)           在android.app.ActivityThread.main(ActivityThread.java:6669)           在java.lang.reflect.Method.invoke(本机方法)           在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:493)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)   2019-07-08 23:50:26.039 2332-2332 / com.example.cribb I / Process:正在发送   信号。 PID:2332 SIG:9

1 个答案:

答案 0 :(得分:0)

说明:

您已经用?隐藏了问题。 由?组成的运算符必须小心使用。

操作员as?

var params = textView.layoutParams as? LinearLayout.LayoutParams

as?将返回null,如果textView.layoutParams返回null。 调用之后,您的params变量等于null

操作员?.

params?.setMargins(48,10,48,10)

这等于:

if (params != null) {
    params.setMargins(48, 10, 48, 10)
}

在您的情况下,params==null不会执行任何操作。

setLayoutParams调用(使用属性语法)

setLayoutParams方法要求您传递non-null LayoutParams参数。来自docs

  

ViewGroup.LayoutParams:此视图的布局参数不能为空

这就是为什么当您通过params==null时应用崩溃的原因。



为什么textView.layoutParams返回null

来自docs

  

与此视图关联的LayoutParams;如果尚未设置任何参数,则为null

您要呼叫textView.layoutParams来手动创建一个View(不是通过xml布局),

val textView = TextView(activity)

layoutParams字段说明如何将特定的view附加到封闭版式。因此,如果您已通过编程方式创建了View,但尚未将其附加到任何ViewGroup(例如FrameLayoutLinearLayoutConstraintLayout等)上, getLayoutParams将返回null,因为您的View没有封闭的布局


该如何解决?

或者使用addView方法之一将您创建的{em> 以编程方式添加到View,或者创建ViewGroup在布局xml文件中,然后将其放在View中。