簡體   English   中英

更新kotlin類中的layout_margin以獲取特定元素

[英]Update layout_margin inside kotlin class for specific elements

因此,這應該是非常基本的,但是我是Kotlin的新手。 所以我基本上在RelativeLayout視圖內有以下ImageView

<ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            app:srcCompat="@drawable/moon_0"
            android:id="@+id/imagen_luna"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp" 
            android:layout_alignParentStart="true"
            android:layout_alignParentEnd="true" 
            android:layout_alignParentBottom="true"
            android:layout_alignParentTop="true" />

問題是,在特定條件下,此ImageView可以與其他元素發生視覺沖突,因此我必須修改marginStartmarginEnd屬性。 我在一些教程中看到,首先我必須獲得當前的布局邊距或類似的東西,但是我不確定為什么它是如此復雜,在Swift中,我只是修改每個邊距的屬性。

有沒有一種簡單的方法可以做到這一點,或者如果沒有最簡單的方法可以做到這一點?

更新-在適配器中添加了代碼

這是我的適配器中針對此特定ImageView的代碼:

override fun onBindViewHolder(holder: AnoViewHolder, position: Int) {
    ...
    if(respec.nombre_icono_signo != "" && respec.imagen_luna != "") {
        val layoutParamsLuna = holder.view?.imagen_luna.layoutParams as RelativeLayout.LayoutParams
        layoutParamsLuna.setMargins(1, 8, 15, 8)
        holder.view?.imagen_luna.layoutParams = layoutParamsLuna
    }
    ...
}

事情是什么也沒做,我的理論是setMargins函數接受左右邊距,而不接受開始和結束邊距。

您可以在layoutParams視圖中更新邊距

例如:

    val layoutParams= imagen_luna.layoutParams as RelativeLayout.LayoutParams
    layoutParams.marginEnd=resources.getDimension(your_dimension).toInt()
    layoutParams.marginStart=resources.getDimension(your_dimension).toInt()

    layoutParams.bottomMargin=resources.getDimension(your_dimension).toInt()
    layoutParams.topMargin=resources.getDimension(your_dimension).toInt()

    //or

    layoutParams.setMargins(start,top,end,bottom)

    imagen_luna.layoutParams=layoutParams

您必須在尺寸文件中為邊距添加值。因為如果這樣設置setMargins(1、8、15、8),它將以像素為單位而不是dp。

因此,請使用如下所示的邊距值。

<dimen name="spacing_normal">16dp</dimen>
<dimen name="spacing_small">8dp</dimen>
<dimen name="spacing_tiny">4dp</dimen>

像belo一樣更新您的dapter類

override fun onBindViewHolder(holder: AnoViewHolder, position: Int) {
...
if(respec.nombre_icono_signo != "" && respec.imagen_luna != "") {
    val layoutParamsLuna = holder.view?.imagen_luna.layoutParams as RelativeLayout.LayoutParams
    layoutParamsLuna.setMargins(context.resources.getDimension(R.dimen.spacing_normal).toInt(), 
           context.resources.getDimension(R.dimen.spacing_normal).toInt(), 
           context.resources.getDimension(R.dimen.spacing_normal).toInt(),
           context.resources.getDimension(R.dimen.spacing_normal).toInt())
    holder.view?.imagen_luna.layoutParams = layoutParamsLuna
}else{
  //reset margin for else case because recylerview reuse views so it's will keep previous states
}
...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM