Android ConstraintLayout の TextView コンポーネントのコンテンツが長すぎて画面を超えません

1. 画面以外の問題の原因

TextView コンポーネントを設定するときは、ConstraintLayout で TextView コンポーネントをよく使用します。android:layout_width="wrap_content"コンポーネントの幅は、コンテンツの長さに応じて適切にサイズ調整されます。
通常はこのままで問題ありませんが、左余白 (android:layout_marginLeft = "50dp")TextView コンポーネントの幅は依然として親レイアウトの幅であり、一部の部分が親レイアウトを超えて見えなくなることがわかります

<TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ...
        />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="50dp"
        ...
        />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dp"
        ...
        />

ここに画像の説明を挿入
TextView は、思ったように行を自動的に折り返しませんが、画面を超えて元の幅を維持していることがわかります。

2.解決策

android:layout_width=" wrap_content " を android:layout_width=" match_parent "に変更するのはとても簡単です
普通に埋まった
。この記事はここで終わります
ここに画像の説明を挿入

この方法で解決できるのは 1 行あたり 1 つのコントロールだけですが、ほとんどの場合、TextView の右側に 1 つ以上のコントロールがあります。これが設定されている場合、TextView のコンテンツの長さに関係なく、後続のコンポーネントはレイアウトの右端
ここに画像の説明を挿入

マルチコンポーネントソリューション

1. 複数部品のチェーン配置

ビューは、双方向の場所の制約によって互いにリンクされています

<TextView
        android:id="@+id/tv"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/tv_small"
        .../>
<TextView
        android:id="@+id/tv_small"
        app:layout_constraintLeft_toRightOf="@+id/tv"
        app:layout_constraintRight_toRightOf="parent"
        .../>

ここに画像の説明を挿入

2. チェーン レイアウト スタイルを設定する

2 つのコンポーネントがチェーンを形成した後、それらは親レイアウトで等間隔に配置されますが、これは私たちが望むものではありません.2
つのパラメータを記述して設定します

<TextView
		android:id="@+id/tv"
		app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintHorizontal_bias="0"
        .../>

ここに画像の説明を挿入

3. コントロールを画面に限定する

ただ、この設定をしてもやはりメインタイトルが長すぎると画面からはみ出してしまうので、
android:layout_width=" wrap_content " とだけ設定したのと同じように、設定して元の開始点に戻しまし
ここに画像の説明を挿入
た。は成功まであと 1 歩です。設定するだけです。

<TextView
        android:layout_width="0dp"
        app:layout_constraintWidth_default="wrap"
        .../>

この設定の後、メイン タイトルのコンテンツが字幕の隣に短時間表示される可能性があり
ここに画像の説明を挿入
、メイン タイトルのコンテンツが長すぎて画面から字幕を絞り出すことができません。
ここに画像の説明を挿入

要約する

  • 2 つ以上のコンポーネントがチェーンでリンクされていない場合、フロント コンポーネントはリア コンポーネントによって制約されず、現在のフロント コンポーネントは android:layout_width=" match_parent " を設定します コンポーネントの幅は親 View の最大幅です
  • 2 つ以上のコンポーネントがチェーンでリンクされており、Match Constraints (android:layout_width="0dp") の形式で設定することをお勧めします。デフォルトでは、Match Constraints のビューは、ただし、app:layout_constraintWidth_default
    属性と値1、layout_constraintWidth_default = "を使用して、この動作を変更できます。広める" : デフォルトでは、各辺の制約を満たすためにビューを可能な限り拡大します
    2, layout_constraintWidth_default = "包む」 : ビューは必要な場合にのみコンテンツに合わせて拡大されますが、制限されている場合はビューがコンテンツよりも小さくなることがあります
  • android:layout_width="wrap_content"
    との
    android:layout_width="0dp" app:layout_constraintWidth_default="wrap"
    違いは、wrap_content は幅をコンテンツの幅と一致させますが、最大幅は後続のコンポーネントの影響を受けませんが、**layout_constraintWidth_default="wrap"** は幅を拡張するために両側の制限を考慮します。

おすすめ

転載: blog.csdn.net/weixin_41046681/article/details/126250929