android - 如何从 fragment Kotlin Android动态设置单选按钮的高度

标签 android kotlin radio-button fragment

如何从Fragment(而非Activity)动态设置单选按钮的布局高度。我尝试通过more_button.layoutParams.height = less_height设置高度,它在Activity中效果很好,但是在Fragment中抛出IllegalStateException。请参阅随附的日志猫。下边是
fragment_tap_gesture.xml

    <RadioGroup
    android:id="@+id/tap_gesture_options"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="40dp"
    android:layout_marginStart="40dp"
    android:layout_marginTop="32dp"
    android:gravity="center"
    android:orientation="horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tap_sensitivity_message">

    <RadioButton
        android:id="@+id/less_button"
        android:layout_width="0dp"
        android:layout_height="45dp"
        android:layout_weight="1"
        android:background="@drawable/rb_tinnitus_select_background"
        android:button="@android:color/transparent"
        android:checked="true"
        android:gravity="center"
        android:padding="8dp"
        android:text="@string/less"
        android:textColor="@drawable/rb_tinnitus_select_text"
        android:textSize="18sp" />

    <RadioButton
        android:id="@+id/default_button"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:layout_weight="1"
        android:background="@drawable/rb_tinnitus_select_background"
        android:button="@android:color/transparent"
        android:checked="true"
        android:gravity="center"
        android:padding="8dp"
        android:text="@string/default_choice"
        android:textColor="@drawable/rb_tinnitus_select_text"
        android:textSize="18sp" />

    <RadioButton
        android:id="@+id/more_button"
        android:layout_width="0dp"
        android:layout_height="90dp"
        android:layout_weight="1"
        android:background="@drawable/rb_tinnitus_select_background"
        android:button="@android:color/transparent"
        android:gravity="center"
        android:padding="8dp"
        android:text="@string/more"
        android:textColor="@drawable/rb_tinnitus_select_text"
        android:textSize="18sp" />
</RadioGroup>

TapGestureFragment.kt-onCreateView:
enableSensitivityButtons()

    var less_height: Int = less_button.layoutParams.height
    var more_height= more_button.layoutParams.height
    var default_height= default_button.layoutParams.height
    if (default_height > less_height){
        more_button.layoutParams.height = less_height
        Log.i("shiva"," "+more_button.layoutParams.height)
    }

我这样称呼观点
private fun enableSensitivityButtons(){
    view!!.more_button.isEnabled = true
    view!!.less_button.isEnabled = true
    view!!.default_button.isEnabled = true
}

Logcat错误:
2020-03-13 11:22:31.416 15325-15325/com.starkey.android.newlink.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.starkey.android.newlink.debug, PID: 15325
java.lang.IllegalStateException: less_button must not be null
    at com.starkey.android.newlink.fragments.TapGestureFragment.onCreateView(TapGestureFragment.kt:164)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6810)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

最佳答案

使用方法覆盖函数 onViewCreated 并设置片段中单选按钮的布局高度或宽度。

(示例:id“more_button”设置高度= 300dp和设置宽度= 500dp)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
   super.onViewCreated(view, savedInstanceState)
   view.more_button.layoutParams.height = 300
   view.more_button.layoutParams.width = 500
}

关于android - 如何从 fragment Kotlin Android动态设置单选按钮的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60665669/

相关文章:

javascript - 更改字体颜色 onclick 单选按钮

html - 重用包含单选按钮组的 Angular 组件

未为模块指定 Android Studio APK 路径

android - 在 Broadcastreceiver 中检测 USB - 我错过了什么?

intellij-idea - 为什么在 IntelliJ 中为 "Smart cast to kotlin.String"

android - 如何将本地 aar 依赖项添加到 bintray 发布的库中?

android - 创建新的Kotlin项目时无法解决依赖关系

c# - 单选按钮和显示

android - 如何创建一个根据变化的变量显示其状态的复选框?

php - Android 系统与 php mysql 之间的连接但出现错误