Как автоматически определить размер текста по высоте? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть вертикальный LinearLayout с высотой 32dp, и я хочу разместить два TextView по 16dp каждый. Длина текста различна, и я хочу, чтобы он всегда красиво помещался в одной строке.

Я пробовал с AutoTextView и с классическим TextView + AutoSizing от TextViewCompat, но ни один из них действительно не работает. Мой текст немного сжимается, но всегда заканчивается обрезкой внизу.

Здесь базовый код

LinearLayout adressTextLayout = new LinearLayout(activity);
adressTextLayout.setOrientation(LinearLayout.VERTICAL);

adressTextLayout.setLayoutParams(new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
    //icon_size_big = 32dp
    (int) (activity.getResources().getDimension(R.dimen.icon_size_big))));

boolean noAdress = true;

//First line with Country, Region and department
if(!mondialAdress.isEmpty()){
    noAdress = false;
    TextView tx = Utils.createAutoFitTextView(activity, mondialAdress, true, (int) (activity.getResources().getDimension(R.dimen.icon_size_big)/2));
    tx.setTypeface(null, Typeface.ITALIC);
    adressTextLayout.addView(tx);
}
//Second line with adress, postal code and city
if(!localAdress.isEmpty()){
    noAdress = false;
    TextView tx = Utils.createAutoFitTextView(activity, localAdress, true, (int) (activity.getResources().getDimension(R.dimen.icon_size_big)/2));
    adressTextLayout.addView(tx);
}
//Default line in case we didn't found any adress
if(noAdress){
    adressTextLayout.addView(Utils.createAutoFitTextView(activity, activity.getResources().getString(R.string.hint_provide_information), true, 0));
}

Вот функция createAutoFitTextView () с TextViewCompat

public static TextView createAutoFitTextView(Activity activity, String text, boolean singleLine, int maxHeight) {
    TextView textView = new AutofitTextView(activity);

    textView.setText(text);

    //MATCH_PARENT by default
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, maxHeight > 0 ? maxHeight : ViewGroup.LayoutParams.MATCH_PARENT);
    textView.setLayoutParams(params);

    //Auto Sizing by TextViewCompat
    TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

    if(singleLine){
        textView.setSingleLine(true);
    }

    return textView;
}

Здесь функция с AutoFitTextView

public static AutofitTextView createAutoFitTextView(Activity activity, String text, boolean singleLine, int maxHeight) {
    AutofitTextView textView = new AutofitTextView(activity);

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, maxHeight != -1 ? maxHeight : ViewGroup.LayoutParams.MATCH_PARENT);
    textView.setLayoutParams(params);

    textView.setText(text);
    if(singleLine){
        textView.setSingleLine(true);
    }
    return textView;
}

Вот результат:

With AutoFillTextView

...