使用 Kotlin 更改片段中的按钮背景

Posted

技术标签:

【中文标题】使用 Kotlin 更改片段中的按钮背景【英文标题】:Change Button Background in a Fragment with Kotlin 【发布时间】:2020-03-23 16:22:38 【问题描述】:

我是 kotlin 的新手,所以我不知道我做错了多少事情。 我正在尝试从代码中设置片段的按钮背景,但是当我在手机中启动应用程序时,只有背景和一个空按钮

class start : Fragment() 


    override fun onCreateView(Layoutinflater: LayoutInflater,
                              container: ViewGroup?, savedInstantState: Bundle?):View? 
        return Layoutinflater.inflate(R.layout.fragment_start, container, false)

        val button_start = view!!.findViewById<Button>(R.id.button_start_1_id)

        button_start.setBackgroundResource(R.drawable.button_start1)


    



<ImageButton

    android:id="@+id/button_start_1_id"
    android:layout_
    android:layout_
    android:onClick="button_start_pushed">

</ImageButton>

我也是这个论坛的新人,所以如果做错了什么请告诉我

【问题讨论】:

【参考方案1】:

欢迎使用 ***。

您的问题的答案很简单。首先,您不需要使用以下代码明确引用您的视图,这是多余的。

        val button_start = view!!.findViewById<Button>(R.id.button_start_1_id)

您可以使用视图的 id 轻松获取对视图/图像视图的引用。在您的情况下,您可以在视图类中调用背景属性并使用 resource.getDrawable(R.drawable.button_start1)

设置背景

如果您的 API 级别为 16 或以上,您可以使用以下代码。

class ImageFragment : Fragment()

override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? 
    return Layoutinflater.inflate(R.layout.fragment_start, container, false)



override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
    super.onViewCreated(view, savedInstanceState)
    button_start.background = resources.getDrawable(R.drawable.button_start1)
    

resources.getDrawable 在 Kotlin 中给出弃用警告,因为它需要 Resource.Theme 作为第二个参数。如果您有 Resource.Theme,请将其作为第二个参数。 您的布局如下:

<ImageButton

    android:id="@+id/button_start"
    android:layout_
    android:layout_
    android:onClick="button_start_pushed">

</ImageButton>

如果您使用低于 16 的 API 级别,则可以使用以下代码:

class ImageFragment : Fragment()

override fun onCreateView(Layoutinflater: LayoutInflater,
                          container: ViewGroup?, savedInstantState: Bundle?): View? 
    return Layoutinflater.inflate(R.layout.fragment_start, container, false)


override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
    super.onViewCreated(view, savedInstanceState)
    button_start.setImageResource(R.drawable.button_start1)


只要确保你的drawable中有button_start1图标或img,并且你的布局名称是正确的。

还有一点需要注意:拥有自己一致的命名约定会容易得多,或者至少遵循 Kotlin 或 Java 推荐的命名约定。

希望对你有帮助!

【讨论】:

第二段代码完美解决了我的问题,非常感谢,很有用。

以上是关于使用 Kotlin 更改片段中的按钮背景的主要内容,如果未能解决你的问题,请参考以下文章

kotlin-从一个片段更改多个片段的小数位

从片段中的按钮单击打开导航抽屉(Kotlin)

有没有办法以编程方式使用kotlin更改片段中的文本颜色?

如何在 Kotlin 片段内的按钮之间切换片段?

如何从片段更改 Tablayout 的背景颜色?

如何更改片段 Kotlin