web-dev-qa-db-ja.com

制約レイアウトベースラインからベースラインへの自動サイズ設定

2つのテキストビューをベースラインで揃え、同時にテキストサイズに自動サイズを使用しようとしています。簡略化したコード例を次に示します。最初のtextviewのサイズが大きいため、textsizeは自動的に大きな値に設定されます。 2番目のテキストビューは最初のテキストビューよりも小さいため、自動決定されたテキストサイズは小さくなります。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    xmlns:app="http://schemas.Android.com/apk/res-auto">

    <TextView
        Android:id="@+id/text1"
        Android:layout_width="200dp"
        Android:layout_height="100dp"
        Android:text="text1"
        Android:maxLines="1"
        Android:autoSizeTextType="uniform"
        Android:autoSizeMaxTextSize="200sp"
        Android:autoSizeMinTextSize="2sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/text2"
        app:layout_constraintTop_toTopOf="parent"/>

    <TextView
        Android:id="@+id/text2"
        Android:layout_width="50dp"
        Android:layout_height="20dp"
        Android:text="text2"
        Android:maxLines="1"
        Android:autoSizeTextType="uniform"
        Android:autoSizeMaxTextSize="200sp"
        Android:autoSizeMinTextSize="2sp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/text1"
        app:layout_constraintBaseline_toBaselineOf="@id/text1"/>

</Android.support.constraint.ConstraintLayout>

サンプルコードの結果

問題は、autoSizeTextTypeを使用するとすぐにlayout_constraintBaseline_toBaselineOfが機能しなくなるように見えることです。

誰かが私を正しい方向に向けることができればいいのですが。制約レイアウトの使用方法が間違っていることを理解していますか?それとも、baseline_tobaselineが自動サイズ設定で機能しないだけですか?

6

私はこの問題にハックを使用しています。

幸いなことに、私の場合は2つの単語があるので、最終的に次のようなものを思いつきました。

private fun getCorrectTextValue(value: Number): SpannableString {
    val currency = getString(R.string.common_currency)
    val formatter = NumberFormat.getInstance(Locale.getDefault())
    val ss = SpannableString("${formatter.format(value)} $currency")
    ss.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen.max_text_size)), value.toString().length, value.toString().length + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    return ss
}

それは私のために働いています

おそらく、SpannableStringを使用して空白文字を追加し、その高さを次のように設定できます。

ss.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen.max_text_size)), value.toString().length, value.toString().length + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
2
b2mob

TextviewからautoSizeを削除し、TextViewテキストサイズを設定してみてください。物事は自然にうまくいき始めます。少なくともこれは私にとってはうまくいきました。

    <TextView
        Android:id="@+id/text1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="56dp"
        Android:maxLines="1"
        Android:text="text1"
        Android:textSize="100sp"
        app:layout_constraintEnd_toStartOf="@+id/text2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        Android:id="@+id/text2"
        Android:layout_width="50dp"
        Android:layout_height="20dp"
        Android:text="text2"
        Android:maxLines="1"
        Android:autoSizeTextType="uniform"
        Android:autoSizeMaxTextSize="200sp"
        Android:autoSizeMinTextSize="2sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/text1"
        app:layout_constraintBaseline_toBaselineOf="@id/text1"
    />
1