Как вы создаете ConstraintLayouts и рекомендации программно? Я попробовал приведенный ниже код, чтобы создать простой макет, который привязывает взгляд к середине экрана с помощью Руководства, но он отображает красный вид «v» в левой части экрана (см. screenshot)Создание Android ConstraintLayout и рекомендаций в коде
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ConstraintLayout cl = new ConstraintLayout(this);
cl.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
setContentView(cl);
Guideline gl = new Guideline(this);
ConstraintLayout.LayoutParams gllp = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 500);
gllp.guidePercent = 0.5f;
gllp.orientation = LinearLayout.VERTICAL;
gl.setLayoutParams(gllp);
gl.setId(View.generateViewId());
cl.addView(gl);
View v = new View(this);
v.setId(View.generateViewId());
v.setBackgroundColor(0xFFFF0000);
ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(50, 500);
lp.rightToRight = gl.getId();
v.setLayoutParams(lp);
cl.addView(v);
}
}
Я также использую beta3. Это очень странно. Я получил ошибку на https://code.google.com/p/android/issues/detail?id=227030 при установке, но установка завершается успешно, даже если вы получили сообщение об ошибке. Я проверил md5 фактического файла constraint-layout-1.0.0-beta3.aar, и у него есть правильный md5, я думаю (0b98641b30b62b65adbeba29d90d1107), так что это действительно бета3. – snoob
Я только что установил макет установки для моего коллеги (который преуспел без ошибок) и попробовал это, и у него такое же нарушение, что и у меня. Использование beta3. – snoob
Я получаю правильное поведение с бета1. Таким образом, похоже, что это был регресс в бета2. Я подтвердил это на своей машине и машине моего коллеги. Протестировано на nexus 6 с android 5, а на эмуляторе с android 5, 6 и 7 (одинаковое поведение на всех). – snoob