web-dev-qa-db-fra.com

Définissez la marge d'exécution sur n'importe quelle vue à l'aide de Kotlin

Je suis un débutant à Kotlin. Je ne suis pas trop familier avec cette langue. Je fais un exemple et joue avec le code. Je veux juste définir la marge d'exécution sur n'importe quelle vue. J'essaie également de le rechercher sur Google, mais je n'obtiens aucune solution appropriée pour cette tâche.

Exigence

Définissez la marge d'exécution sur n'importe quelle vue.

Description

J'ai pris un fichier xml qui est contenu sur Button et je veux définir une marge d'exécution sur ce bouton.

Code

J'essaye aussi ci-dessous mais ça ne marche pas.

class MainActivity : AppCompatActivity() {


//private lateinit var btnClickMe: Button
//var btnClickMe=Button();

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //For setting runtime text to any view.
        btnClickMe.text = "Chirag"

        //For getting runtime text to any view
        var str: String = btnClickMe.text as String;

        //For setting runtimer drawable
       btnClickMe.background=ContextCompat.getDrawable(this,R.drawable.abc_ab_share_pack_mtrl_alpha)//this.getDrawable(R.drawable.abc_ab_share_pack_mtrl_alpha)


        /*
        //For Setting Runtime Margine to any view.
        var param:GridLayout.LayoutParams
        param.setMargins(10,10,10,10);

        btnClickMe.left=10;
        btnClickMe.right=10;
        btnClickMe.top=10;
        btnClickMe.bottom=10;
        */

        // Set OnClick Listener.
        btnClickMe.setOnClickListener {
            Toast.makeText(this,str,5000).show();
        }

    }

}

activity_main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:orientation="vertical"
tools:context="chirag.iblazing.com.stackoverflowapp.MainActivity"
Android:layout_height="match_parent">

<Button
    Android:id="@+id/btnClickMe"
    Android:text="Click Me"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content" />

</LinearLayout>

Comment puis-je procéder?

12
Chirag Solanki

Vous devez obtenir l'objet layoutParams à partir du bouton et le convertir en LinearLayout.LayoutParams as btnClickMe Le parent de est LinearLayout et définissez les marges comme vous le souhaitez.

Vérifiez le code suivant:

val param = btnClickMe.layoutParams as LinearLayout.LayoutParams
param.setMargins(10,10,10,10)
btnClickMe.layoutParams = param // Tested!! - You need this line for the params to be applied.

J'espère que ça aide.

25
chandil03

Voilà comment j'aimerais faire à Kotlin -

fun View.margin(left: Float? = null, top: Float? = null, right: Float? = null, bottom: Float? = null) {
    layoutParams<ViewGroup.MarginLayoutParams> {
        left?.run { leftMargin = dpToPx(this) }
        top?.run { topMargin = dpToPx(this) }
        right?.run { rightMargin = dpToPx(this) }
        bottom?.run { bottomMargin = dpToPx(this) }
    }
}

inline fun <reified T : ViewGroup.LayoutParams> View.layoutParams(block: T.() -> Unit) {
    if (layoutParams is T) block(layoutParams as T)
}

fun View.dpToPx(dp: Float): Int = context.dpToPx(dp)
fun Context.dpToPx(dp: Float): Int = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, resources.displayMetrics).toInt()

maintenant nous devons simplement appeler cela sur une vue comme

textView.margin(left = 16F)
13
Hitesh Gupta