【问题标题】:Change Button Background in a Fragment with Kotlin使用 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_width="124dp"
    android:layout_height="69dp"
    android:onClick="button_start_pushed">

</ImageButton>

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

【问题讨论】:

    标签: button kotlin background fragment setbackground


    【解决方案1】:

    欢迎使用 stackoverflow。

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

            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_width="124dp"
        android:layout_height="69dp"
        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 推荐的命名约定。

    希望对你有帮助!

    【讨论】:

    • 第二段代码完美解决了我的问题,非常感谢,很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2021-05-07
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多