Les attributs XML de mise en page Android sont améliorés (coins arrondis, lignes pointillées, bordures, etc.)

Aperçu

          Dans le développement Android, nous utilisons souvent xml pour écrire des fichiers de mise en page. Cette implémentation est non seulement simple, mais aussi plus expressive. Cependant, les attributs de mise en page fournis par Google sont limités et nous devons utiliser du code ou des contrôles personnalisés pour réaliser certaines fonctions. Existe-t-il un moyen d'améliorer les attributs pour obtenir des fonctions supplémentaires? Par exemple, nous utilisons souvent background pour représenter et définir l'arrière-plan, pouvons-nous utiliser layout_radius pour représenter et définir des coins arrondis?

 

Exemple d'utilisation

  Besoin de référencer les dépendances dans le projet build.gradle

 implementation 'com.zhangzheng.superxml:library:1.1.0'

 Enregistrez également une ligne de code dans l'application

  SuperXml.init(this)

  PLUS DE

 

Description de la capacité

 

Amélioration des attributs

   Filet:         

   <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginTop="20dp"
        android:background="#FF0000"
        app:layout_radius="40dp" />

  La description

       app: layout_radius prend en charge la définition de l'arrière-plan du contrôle sur des coins arrondis et l'arrière-plan prend en charge les arrière-plans ou les images de couleur unie. De plus, si vous souhaitez définir le src d'ImageView sur des coins arrondis, vous devez utiliser app: layout_src_radius, par exemple 

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:src="@mipmap/order_ic_shipper_default"
    app:layout_src_radius="10dp" />

 

   Attribut composé

       

  <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="asdasdasdasd"
        app:layout_textColor_pressedFalse="#00FF00"
        app:layout_textColor_pressedTrue="#FF0000" />

   La description

        Dans des circonstances normales, nous voulons indiquer que la couleur de la police est différente entre le clic et l'état normal, ou l'arrière-plan utilisera le sélecteur pour définir un fichier, puis le référencera dans le fichier de mise en page. D'une part, une telle utilisation est très gênante, d'autre part, la lisibilité sera également Diminuer (l'utilisateur doit entrer le fichier de sélection pour analyse avant de connaître l'intention de l'expression de code). Les propriétés de réutilisation couramment utilisées sont encapsulées ici, comme suit:

Les attributs Type d'attribut La description
layout_background_enableTrue
layout_background_enableFalse
reference|color(资源或者颜色)
Contexte (est-il disponible)
layout_background_pressedTrue
layout_background_pressedFalse
référence | couleur (ressource ou couleur) Arrière-plan (si appuyé)
layout_background_selectedTrue
layout_background_selectedTrue
référence | couleur (ressource ou couleur) Contexte (choisissez ou non)
layout_textColor_enableTrue
layout_textColor_enableFalse
référence | couleur (ressource ou couleur) Couleur de police (disponible)
layout_textColor_pressedTrue
layout_textColor_pressedFalse

 

référence | couleur (ressource ou couleur) Couleur de la police (qu'elle soit enfoncée ou non)
layout_textColor_selectedTrue
layout_textColor_selectedFalse
référence | couleur (ressource ou couleur) Couleur de police (choisissez ou non)
     

 

Cadre   

 <View
        android:id="@+id/view"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_marginTop="20dp"
        android:background="#FF0000"
        app:layout_border_color="#0000FF"
        app:layout_border_width="1dp"
        app:layout_radius="40dp" />

 

La description

      Relativement simple, layout_border_color représente la couleur de la bordure, layout_border_width représente l'épaisseur de la bordure et le rayon est utilisé ensemble pour représenter les coins arrondis de la bordure.

 

 

ligne pointillée

 <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="20dp"
        android:background="#FF0000"
        app:layout_dash_gap="10dp"
        app:layout_dash_height="1dp"
        app:layout_dash_width="5dp" />

 

La description

     Il peut être utilisé sur n'importe quelle vue (il est recommandé de le définir dans View), et grap, dash_height et dash_width doivent être définis en même temps. Prend en charge les lignes pointillées horizontales et verticales, ici détectera la largeur et la hauteur de la vue à déterminer. Description de la propriété: dash_grap (espacement des lignes en pointillé), dash_width (largeur d'une seule petite ligne), dash_height (hauteur d'une seule petite ligne)

 

 

Afficher le remplacement ou l'amélioration

          Cette capacité peut remplacer la vue du fichier de disposition par d'autres contrôles ou l'améliorer.

 

Vue de défilement

      Afin de nous adapter aux téléphones mobiles à petit écran, nous pouvons ajouter une couche de ScrollView à chaque fichier de mise en page, et maintenant le contrôle du conteneur est amélioré.

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="130dp"
        android:gravity="center"
        android:orientation="vertical"
        android:scrollbars="none"
        app:layout_canScroll="true">

La description

     Ajoutez l'attribut app: layout_canScroll = "true" à la vue qui doit être défilée pour lui donner des capacités de défilement. En outre, toutes les propriétés scrollView peuvent être configurées dans le contrôle conteneur.

 

 

Remplacement d'attribut

          Il existe un scénario de gestion très courant. Il existe plusieurs contrôles dans un élément. La plupart des attributs des contrôles sont identiques (comme la couleur de police et la taille de TextView). En général, nous ajouterons les mêmes attributs à chaque contrôle (redondant ), ou définir un style public (trop gênant). Reportez-vous maintenant à la disposition de html, définissez un style commun dans le contrôle parent et définissez la valeur par défaut du contrôle enfant.

  <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:textColor="#FF0000"
        android:textSize="20sp"
        android:textStyle="italic"
        android:scaleType="center"
        app:layout_cover_children="true">

        <ImageView

            android:layout_width="50dp"
            android:src="@mipmap/ic_launcher"
            android:layout_height="50dp"/>

        <TextView
            android:capitalize="none"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#FF00FF"
            android:textStyle="italic"
            android:text="11111" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textSize="13dp"
            android:text="22222" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textSize="14dp"
            android:text="333333" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textSize="15dp"
            android:text="444444" />

    </LinearLayout>

 

Attributs pris en charge

       

Type de contrôle Les attributs  
Affichage
textColor
 
textSize
 
text
 
maxLines
 
maxEms
 
textColorHint
 
hint
 
textDirection
 
textStyle
 
capitalize
 
ImageView
src
 
scaleType
 

 

Développer

 

Extension de propriété

  SuperXml.addDecorate(object : IDecorateView() {
            override fun initExtraInfo(typedArray: TypedArray): Boolean {
            }

            override fun decorate(view: View) {
            }
        })

Référence d'implémentation

internal class RadiusDecorate(var radius: Float = 0f) : IDecorateView() {

    override fun initExtraInfo(typedArray: TypedArray): Boolean {
        radius = typedArray.getDimension(R.styleable.decorate_view_layout_radius,0f)
        return radius > 0
    }

    override fun decorate(view: View)= view.setRadius(radius)

}

 

Contrôle du remplacement OU amélioration

 SuperXml.addDecorate(object :IWrapDecorateView(){
            override fun decorateView(view: View): View {
            }

            override fun initExtraInfo(typedArray: TypedArray): Boolean {
            }
        })

Référence d'implémentation

internal class ScrollWrapDecorate(var canScroll: Boolean = false) : IWrapDecorateView() {

    override fun initExtraInfo(typedArray: TypedArray): Boolean {
        canScroll = typedArray.getBoolean(R.styleable.decorate_view_layout_canScroll, false)
        return canScroll
    }

    override fun decorateView(view: View): View {
        return ScrollViewProxy(
            view,
            attributeSet
        )
    }


}

 

Remplacement d'attribut

  SuperXml.addCoverAttributeParse(object : AbsChildViewParse<TextView>(){
            override fun createInfoView(context: Context, attributeSet: AttributeSet?): TextView {
            }

            override fun coverAttribute(): MutableList<*> {
            }
        })

Référence d'implémentation

class TextViewCoverParse : AbsChildViewParse<TextView>() {

    override fun createInfoView(context: Context, attributeSet: AttributeSet?): TextView =
        TextView(context, attributeSet)

    override fun coverAttribute(): MutableList<*> = mutableListOf(
        AttributeInfo("textSize",{ textSize }) { value -> textSize = value },
        AttributeInfo("textColor",{ textColors }) { value -> setTextColor(value) },
        AttributeInfo("text",{ text }) { text -> setText(text) },
        AttributeInfo("maxLines",{ maxLines }) { maxLines -> setMaxLines(maxLines) },
        AttributeInfo("maxEms",{ maxEms }) { maxEms -> setMaxEms(maxEms) },
        AttributeInfo("textColorHint",{ hintTextColors }) { hintTextColors -> setHintTextColor(hintTextColors) },
        AttributeInfo("hint",{ hint }) { hint -> setHint(hint) },
        AttributeInfo("textDirection",{ textDirection }) { textDirection -> setTextDirection(textDirection) },
        AttributeInfo("textStyle",{ typeface }) { typeface -> setTypeface(typeface) },
        AttributeInfo("capitalize",{ inputType }) { inputType -> setInputType(inputType) }
    )



}

 

Code: github

https://github.com/long8313002/SuperXml

Je suppose que tu aimes

Origine blog.csdn.net/long8313002/article/details/108703057
conseillé
Classement