android

TextView 에 항상 흐르는 글씨를 나타나게 하려면...

Billcoreatech Billcoreatech 2021. 2. 17. 22:51

자료출처 : dev.re.kr/2

 

[Tip] 항상 흐르는 텍스트 뷰 만들기 (무한 marquee)

안드로이드에서 흐르는 텍스트를 만드는 방법은 무척 간단하다. Layout 리소스 XML 의 TextView (또는 TextView 가 들어간 위젯) 속성에 다음과 같이 세 줄만 추가해 주면 된다. android:ellipsize="marquee" a..

dev.re.kr

앱을 만들다 보니... 화면의 크기는 한계가 있고 나타날 글짜는 많고...

그래서 또 구글링~~~  그러다가 찾은 것이 위에 있는 링크에서 도움을 받았다.

저 링크에 있는 소스 예제는 android 빌드 버전에 예전꺼 일 때 만든 것 같고...

build 버전 28.0.0 이후 부터는 androidx 로 이전을 해야 하는데, 조금의 설정 수정이 필요해서 수정했다.

androidx.appcompat.widget.AppCompatTextView만 수정한 것 같은 생각이... ㅋㅋㅋ


import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;

public class MarqueeTextView extends androidx.appcompat.widget.AppCompatTextView {

    String TAG = "MarqueeTextView" ;

    public MarqueeTextView(Context context) {
        super(context);
    }

    public MarqueeTextView(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect
            previouslyFocusedRect) {

        //Log.d(TAG, "getMarqueeRepeatLimit onFocusChanged(" + this.getMarqueeRepeatLimit() + ")") ;

        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);

    }

    @Override
    public void onWindowFocusChanged(boolean focused) {

        //Log.d(TAG, "getMarqueeRepeatLimit onWindowFocusChanged (" + this.getMarqueeRepeatLimit() + ")") ;

        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

 

위와 같이 수정하고 나서, layout 에서는 

<MarqueeTextView
            android:id="@+id/tv1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:ellipsize="marquee"
            android:fontFamily="@font/noto_sans_bold"
            android:gravity="center_horizontal|center_vertical"
            android:includeFontPadding="false"
            android:marqueeRepeatLimit="marquee_forever"
            android:singleLine="true"
            android:textSize="12sp" />

와 같이 TextView 을 추가하고 그 안에 값을 넣어주면 흐르는 글씨를 만들 수 있다.

기본 제공되는 TextView 에서도

 

android:ellipsize="marquee"

android:marqueeRepeatLimit="marquee_forever"

 

위 2개 항목을 넣어주면 같은 처리가 되기는 하지만, 해당 TextView 에 포커스가 가 있는 경우만 글자가 흐르기 때문에

위에서 보여준 것 처럼 나만의 TextView 로 수정을 해서 사용하게 되면 항상 흐르는 글짜를 볼 수 있다.

 

다만, ListView 에 넣어 사용하게 되는 경우는 좀 헛짓를 하는 경우가 있기는 했다.

 

반응형
1 2 3 4 5 6 7 8 9 ··· 19