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?
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.
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)