Web Analytics

ViewPump

⭐ 164 stars Korean by B3nedikt

Maven Central Documentation

ViewPump 4.0.15

프리/포스트 인플레이션 인터셉터 API를 사용하여 뷰 인플레이션을 가로챌 수 있습니다.

시작하기

의존성

의존성을 포함하세요:

dependencies {

implementation 'androidx.appcompat:appcompat:1.5.1'

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

사용법

인터셉터를 정의하세요. 아래는 텍스트뷰의 텍스트 앞에 접두사를 붙이는 다소 임의의 후-인플레이션 인터셉터 예제입니다.

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; } }

아래는 레이아웃의 XML에서 TextView가 정의되었을 때 CustomTextView를 반환하는 사전 인플레이션 인터셉터의 예시입니다.

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; } }

설치

Application 클래스의 #onCreate() 메서드에서 ViewPump.builder()에 인터셉터를 추가하고 ViewPump를 초기화하세요. 인터셉터의 순서는 요청과 결과의 인터셉터 체인을 형성하기 때문에 중요합니다.

인터셉터는 기본 인플레이션이 발생하는 대신 프로그래밍 방식으로 생성된 뷰를 반환할 수 있으며, 이 경우 이후에 추가된 인터셉터는 건너뛰게 됩니다. 이러한 이유로, 사전 인플레이션 인터셉터보다 사후 인플레이션 인터셉터를 먼저 추가하는 것이 좋습니다.

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

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

컨텍스트에 주입하기

기본 액티비티에 다음을 추가하세요:

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; } }

실용적인 예제는 제 라이브러리 Restring 또는 AppLocale을 참조하세요.

협력자

이 라이브러리는 원래 다음에 의해 만들어졌습니다:

하지만 제 포크는 거의 모든 코드가 변경되었으며 약간 다른 API를 가지고 있습니다.

라이선스

Copyright 2017 InflationX & Contributors

Apache License, Version 2.0 (이하 "라이선스")에 따라 라이선스가 부여됩니다. 이 파일을 라이선스 없이 사용할 수 없습니다. 라이선스 사본은 아래에서 얻을 수 있습니다.

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

적용 가능한 법률에 의해 요구되거나 서면으로 동의하지 않는 한, 이 소프트웨어는 "있는 그대로" 배포되며, 명시적이거나 묵시적인 보증 없이 제공됩니다. 라이선스에서 허용하는 권한 및 제한 사항을 참조하십시오.

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