web-dev-qa-db-ja.com

ConstraintLayout-重複を避ける

ConstraintLayoutレイアウトがあります:

<Android.support.constraint.ConstraintLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Button
        Android:id="@+id/button10"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:ellipsize="end"
        Android:singleLine="true"
        Android:text="small text"
        app:layout_constraintLeft_toLeftOf="parent"/>

    <Button
        Android:ellipsize="end"
        Android:singleLine="true"
        Android:id="@+id/button11"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="small text"
        app:layout_constraintRight_toRightOf="parent"/>

</Android.support.constraint.ConstraintLayout>

次のように表示されます: введите сюда описание изображения 今は大丈夫ですが、私が変更した場合Android:text="small text"からAndroid:text="big teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeext"の場合、ビューは互いにオーバーラップします。

上のスクリーンショットで実際に行ったように、小さなテキストでは「コンテンツの折り返し」があることを確認する必要がありますが、より大きなテキストでは、テキストビューは親の水平方向に最大約40%を占める必要があります。まあテキストが転送されなかったことも-私はAndroid: ellipsize =" end "およびAndroid: singleLine =" true

これは、次のようにする必要があります(デモ用にPhotoshopで編集): введите сюда описание изображения ConstraintLayoutでこれをどのように行うか、またはできない場合-他のレイアウトで?

12
ilw

以下の例のように、Guidelineおよびlayout_constraintWidth_defaultプロパティを使用してそれを行うこともできます

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


    <Button
        Android:id="@+id/button10"
        Android:layout_width="0dp"
        app:layout_constraintWidth_default="wrap"
        Android:layout_height="wrap_content"
        Android:ellipsize="end"
        Android:singleLine="true"
        Android:text="sdtessdsdsdsdsdsdsdsddsdsdxt"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        Android:layout_marginLeft="0dp"
        app:layout_constraintHorizontal_bias="0"
        Android:layout_marginTop="8dp"
        app:layout_constraintRight_toLeftOf="@+id/guideline"
        Android:layout_marginRight="8dp" />

    <Button
        Android:ellipsize="end"
        Android:singleLine="true"
        Android:id="@+id/button11"
        Android:layout_width="0dp"
        app:layout_constraintWidth_default="wrap"
        Android:layout_height="wrap_content"
        Android:text="ddddddsdssdsdsdsdsdsdddt"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        Android:layout_marginTop="8dp"
        Android:layout_marginRight="-1dp"
        Android:layout_marginLeft="8dp"
        app:layout_constraintHorizontal_bias="1"
        app:layout_constraintLeft_toLeftOf="@+id/guideline" />

    <Android.support.constraint.Guideline
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:id="@+id/guideline"
        Android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />

</Android.support.constraint.ConstraintLayout>
22
Pavan

あなたはこのようにすることができます:

<Android.support.constraint.ConstraintLayout 
       xmlns:Android="http://schemas.Android.com/apk/res/Android"
       xmlns:app="http://schemas.Android.com/apk/res-auto"
       xmlns:tools="http://schemas.Android.com/tools"
       Android:layout_width="match_parent"
       Android:layout_height="match_parent">

<Button
    Android:id="@+id/button10"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="30dp"
    Android:ellipsize="end"
    Android:maxLines="1"
    Android:gravity="center_vertical"
    Android:text="small text"
    Android:layout_marginRight="20dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@+id/button11"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    Android:id="@+id/button11"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:ellipsize="end"
    Android:maxLines="1"
    Android:layout_marginLeft="20dp"
    Android:gravity="center_vertical"
    Android:text="small textsfdgdfjkghkdfhgjkdfhgkhgkhkjjkgfkgjkfgjkgjkjgfdkj"
    app:layout_constraintLeft_toRightOf="@+id/button10"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="@+id/button10" />
3
Shweta Chauhan

次の属性が機能します。

app:layout_constrainedWidth="true"

https://developer.Android.com/reference/Android/support/constraint/ConstraintLayout

WRAP_CONTENT:制約の適用(1.1で追加)ディメンションがWRAP_CONTENTに設定されている場合、1.1より前のバージョンでは、リテラルディメンションとして扱われます。つまり、制約によって結果のディメンションが制限されません。一般的にはこれで十分(かつ高速)ですが、状況によっては、WRAP_CONTENTを使用したいが、結果のディメンションを制限するために制約を適用し続ける場合があります。その場合、対応する属性の1つを追加できます。

app:layout_constrainedWidth =” true | false” app:layout_constrainedHeight =” true | false”

2

拘束が左/右からの場合

    set vertical guideline
    set component layout_width = 0dp

制約が上/下からの場合

    set horizontal guideline
    set component layout_height = 0dp
0
kapsid