Кажется, проблема в том, что вы устанавливаете фоновые ограничения как MATCH_PARENT
, что недопустимо в ConstraintLayouts. Я полагаю, вы имели в виду LayoutParams.MATCH_CONSTRAINT
.
Я предполагаю, что вы хотите, чтобы ваш макет "имитировал" этот XML:
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/bkg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_dark"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Что выглядит как:
![enter image description here](https://i.stack.imgur.com/6EewR.png)
tl;dr
: изменить строку int matchParent = LayoutParams.MATCH_PARENT;
на int matchParent = LayoutParams.MATCH_CONSTRAINT;
ОБНОВЛЕНИЕ : Я попробовал свое собственное решение и не сработал, поэтому потратил несколько минут на просмотр вашего кода и обнаружил проблему. Я использую ConstraintLayout 1.1.0
- Да, используйте MATCH CONSTRAINT.
- Вы устанавливаете ограничения для представлений, которые пока не существуют существуют ... поэтому я воссоздал ваш "пользовательский макет", а вот мой:
Основная активность просто раздувает это через setContentView(R.layout.demo_layout)
<?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:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<com.so.ProgressConstraintLayout
android:id="@+id/demo_progress_container"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</android.support.constraint.ConstraintLayout>
И мой ProgressConstraintLayout
… который я скопировал с твоего и изменил:
package com.so;
import android.content.Context;
import android.support.constraint.ConstraintLayout;
import android.support.constraint.ConstraintSet;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ProgressBar;
public class ProgressConstraintLayout extends ConstraintLayout {
private View background;
private ProgressBar progressBar;
public ProgressConstraintLayout(Context context) {
super(context);
addLoader();
}
public ProgressConstraintLayout(Context context, AttributeSet attrs) {
super(context, attrs);
addLoader();
}
public ProgressConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
addLoader();
}
private void addLoader() {
int wrapContent = LayoutParams.WRAP_CONTENT;
int matchConstraint = LayoutParams.MATCH_CONSTRAINT;
ConstraintSet constraintSet = new ConstraintSet();
background = new View(getContext());
background.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright, getContext().getTheme()));
background.setId(generateViewId());
addView(background, new ConstraintLayout.LayoutParams(matchConstraint, matchConstraint));
progressBar = new ProgressBar(getContext(), null, android.R.attr.progressBarStyleLarge);
progressBar.setIndeterminate(true);
progressBar.setId(generateViewId());
addView(progressBar, new ConstraintLayout.LayoutParams(wrapContent, wrapContent));
constraintSet.clone(this);
constraintSet.connect(background.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP);
constraintSet.connect(background.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM);
constraintSet.connect(background.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
constraintSet.connect(background.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
constraintSet.connect(progressBar.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP);
constraintSet.connect(progressBar.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM);
constraintSet.connect(progressBar.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START);
constraintSet.connect(progressBar.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END);
constraintSet.applyTo(this);
}
public void showLoading() {
background.setVisibility(VISIBLE);
progressBar.setVisibility(VISIBLE);
}
public void hideLoading() {
background.setVisibility(GONE);
progressBar.setVisibility(GONE);
}
}
И если вам интересно, как это выглядит ... довольно скучно, но кто я такой, чтобы судить:
![enter image description here](https://i.stack.imgur.com/CAfIp.png)