Android9.0 이상과 Android8.0에서 발생한 문제를 신경쓰지 않고 이용할 수 있는 CustomTextView를 작성해 보았습니다.

매번 layout xml로 설정하는 것이 귀찮습니다 ...



이전에 투고한 아래 2건에 대해 TextView를 이용할 때 매회 설정을 쓰는 것이 어떻습니까…

Android Pie 대응할 때 TextView의 줄 바꿈 사이에 빠진 이야기
Android8.0에서 TextView에 표시된 문자열의 접힌 위치가 이상합니다.

그래서



문제를 신경쓰지 않고 사용할 수 있는 CustomTextView를 작성해 본 실제 코드는 아래와 같습니다.
import android.content.Context;
import android.os.Build;
import android.text.Layout;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatTextView;

public class CustomTextView extends AppCompatTextView {

    public CustomTextView(Context context) {
        this(context, null);
    }

    public CustomTextView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        versionDifferenceAbsorption();
    }

    /**
     * ここでバージョン毎で起こっている問題が起こらないように設定を行う
     */
    private void versionDifferenceAbsorption() {

        // Android8.0の場合にはBreakStrategyをsimpleに設定する
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {
            this.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);
        }

        // Android9.0以降ではFallbackLineSpacingをfalseに設定する
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            this.setFallbackLineSpacing(false);
        }
    }
}

즉시 움직였다.



Android9.0 측에서 표시를 시도한 xml 설정
    <CustomTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="君がッ\n泣くまで\n殴るのを\nやめないッ!"
        android:lineSpacingMultiplier="1.5"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

Android8.0 측에서 표시를 시도한 xml 설정
    <CustomTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="さすがディオ!俺達に出来ないことを平然とやってのけるッ!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

기본 TextView에 표시된 Android 9의 Emulator

사용자 정의 TextView에 표시된 Android 9 Emulator



기본 TextView에 표시된 Android 8.0의 Emulator

사용자 정의 TextView에 표시된 Android 8.0의 Emulator


표시를 확인한 결과!



Android9.0측은 행간이 열리지 않고,Android8.0측은 개행 위치가 이상하게 되어 있지 않기 때문에, 최소한 이전 투고한 내용의 문제는 일어나지 않는 모습
앞으로는 이번에 작성한 CustomTextView를 이용하여 문제를 신경 쓰지 않고 구현하고 싶습니다.

좋은 웹페이지 즐겨찾기