Ограничение макета с растягивающимся видом - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь создать адаптивный макет, но не могу этого сделать.Мне нужно реализовать логику вида, представленную на этих чертежах: (снизу) Существует вид с фиксированным размером, привязанный к нижней части экрана.Над ним есть TextView.Его минимальная высота должна составлять пространство между центральной направляющей и видом снизу.Когда текста много, он должен расти выше центральной линии.В верхней части находится ImageView с максимальной высотой в виде промежутка между верхней частью экрана и центральной направляющей, без минимальной высоты.Мое текущее решение выглядит примерно так:

<ConstraintLayout>
    <ImageView
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="barrier" />

    <Textview
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="bottomView" />

    <View
        android:layout_height="{some}dp"
        app:layout_constraintBottom_toBottomOf="parent" />

    <android.support.constraint.Barrier
        app:barrierDirection="top"
        app:constraint_referenced_ids="guidelineCenter,textView" />
<ConstraintLayout>

На этом этапе дело с длинным текстом работает нормально, но если текст короткий, я получаю текст, привязанный к нижнему виду.Любая идея, как заставить это минимальные ограничения, необходимые для левого изображения?

1 Ответ

0 голосов
/ 14 мая 2018

Насколько я знаю, через XML не существует способа определения минимальной высоты в процентах, поэтому вам придется применять минимальную высоту в коде. Вот два изображения, которые показывают короткий объем текста, а другое - с большим. Красная линия показывает, где находится точка пути 1/2, и она не нужна. Ориентир, установленный на 50%, также не требуется.

[image 1]

[image 2]

activity_main.xml

<android.support.constraint.ConstraintLayout 
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:minHeight="0dp"
        android:text="This is big text "
        app:layout_constraintBottom_toTopOf="@id/bottomView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:id="@+id/bottomView"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:background="@color/colorPrimary"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

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

    <View
        android:id="@+id/view"
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:background="@android:color/holo_red_light"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/guideline" />


</android.support.constraint.ConstraintLayout>

MainActivity.xml

public class MainActivity extends AppCompatActivity {
    private ConstraintLayout mLayout;
    private TextView mTextView;
    private View mBottomView;
    private int mMinHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mLayout = findViewById(R.id.layout);
        mTextView = findViewById(R.id.textView);
        mBottomView = findViewById(R.id.bottomView);
        mTextView.setText(getResources().getString(R.string.large_text).substring(0, 1000));

        mLayout.post(new Runnable() {
            @Override
            public void run() {
                mMinHeight = mLayout.getHeight() / 2 - mBottomView.getHeight();
                if (mTextView.getHeight() < mMinHeight) {
                    mTextView.setMinHeight(mMinHeight);
                }
            }
        });
    }
}
...