2016-11-03 7 views
0

Как вы создаете 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); 
    } 
} 

ответ

0

Это была ошибка, которая теперь исправлена ​​в beta4. Обратите внимание, что вы должны вызвать lp.validate() после настройки ConstraintLayout.LayoutParams в коде. Подробнее см. В https://code.google.com/p/android/issues/detail?id=227039.

0

Какой тип версии: ConstraintLayout Вы используете? Попытка ваш пример с бета-3, я получаю правильное поведение:

enter image description here

редактировать - Я был неверен, и бета-4 имеет решение этой проблемы.

Кроме того, для программного создания параметров макета с помощью ConstraintLayout вы должны вызвать функцию validate() на ConstraintLayout.LayoutParams, прежде чем устанавливать его в представление.

+0

Я также использую beta3. Это очень странно. Я получил ошибку на https://code.google.com/p/android/issues/detail?id=227030 при установке, но установка завершается успешно, даже если вы получили сообщение об ошибке. Я проверил md5 фактического файла constraint-layout-1.0.0-beta3.aar, и у него есть правильный md5, я думаю (0b98641b30b62b65adbeba29d90d1107), так что это действительно бета3. – snoob

+0

Я только что установил макет установки для моего коллеги (который преуспел без ошибок) и попробовал это, и у него такое же нарушение, что и у меня. Использование beta3. – snoob

+0

Я получаю правильное поведение с бета1. Таким образом, похоже, что это был регресс в бета2. Я подтвердил это на своей машине и машине моего коллеги. Протестировано на nexus 6 с android 5, а на эмуляторе с android 5, 6 и 7 (одинаковое поведение на всех). – snoob