Web Analytics

ViewPump

⭐ 164 stars French by B3nedikt

Maven Central Documentation

ViewPump 4.0.15

Vous pouvez intercepter l'inflation des vues en utilisant une API d'intercepteurs avant/après inflation.

Pour commencer

Dépendance

Incluez les dépendances :

dependencies {

implementation 'androidx.appcompat:appcompat:1.5.1'

implementation 'dev.b3nedikt.viewpump:viewpump:4.0.15' }

Utilisation

Définissez votre intercepteur. Voici un exemple quelque peu arbitraire d’un intercepteur post-inflation qui préfixe le texte dans un TextView.

public class TextUpdatingInterceptor implements Interceptor {

@Override public InflateResult intercept(Chain chain) { InflateResult result = chain.proceed(chain.request()); if (result.view() instanceof TextView) { // Do something to result.view() // You have access to result.context() and result.attrs() TextView textView = (TextView) result.view(); textView.setText("[Prefix] " + textView.getText()); } return result; } }

Voici un exemple d'intercepteur avant inflation qui retourne un CustomTextView lorsqu'un TextView est défini dans le XML de mise en page.

public class CustomTextViewInterceptor implements Interceptor {

@NotNull @Override public InflateResult intercept(Chain chain) { InflateRequest request = chain.request(); View view = inflateView( request.getName(), request.getContext(), request.getAttrs() );

if (view != null) { return new InflateResult( view, request.getName(), request.getContext(), request.getAttrs() ); } else { return chain.proceed(request); } }

@Nullable private View inflateView(String name, Context context, AttributeSet attrs) { if ("TextView".equals(name)) { return new CustomTextView(context, attrs); } return null; } }

Installation

Ajoutez vos intercepteurs au ViewPump.builder(), dans votre classe Application dans la méthode #onCreate() et initialisez le ViewPump. L'ordre des intercepteurs est important car ils forment la chaîne d'interception des requêtes et des résultats.

Un intercepteur peut choisir de retourner une vue instanciée par programme plutôt que de laisser se produire l'inflation par défaut, auquel cas les intercepteurs ajoutés après lui seront ignorés. Pour cette raison, il est préférable d'ajouter vos intercepteurs post-inflation avant les intercepteurs pré-inflation.

@Override
public void onCreate() {
    super.onCreate();

ViewPump.init(new TextUpdatingInterceptor(), new CustomTextViewInterceptor()); //.... }

Injecter dans le contexte

Ajoutez ce qui suit à votre activité de base :

public class MainActivity extends AppCompatActivity {

private AppCompatDelegate appCompatDelegate = null;

...

@NonNull @Override public AppCompatDelegate getDelegate() { if (appCompatDelegate == null) { appCompatDelegate = new ViewPumpAppCompatDelegate( super.getDelegate(), this ); } return appCompatDelegate; } }

Pour des exemples pratiques, voyez mes bibliothèques Restring ou AppLocale.

Collaborateurs

Cette bibliothèque a été initialement créée par :

Mon fork a cependant presque tout le code modifié et possède une API légèrement différente.

Licence

Copyright 2017 InflationX & Contributors

Sous licence Apache, Version 2.0 (la "Licence"); vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence. Vous pouvez obtenir une copie de la Licence à

http://www.apache.org/licenses/LICENSE-2.0

Sauf exigence légale ou accord écrit, le logiciel distribué sous la Licence est distribué "TEL QUEL", SANS GARANTIES NI CONDITIONS D’AUCUNE SORTE, explicites ou implicites. Reportez-vous à la Licence pour les règles spécifiques régissant les autorisations et limitations sous la Licence.

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-01 ---