2016-11-03 8 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

ConstraintLayoutのどのバージョンをお使いですか?ベータ3で、あなたの例をしようと、私は正しい動作を取得:

enter image description here

編集 - 私が間違っていた、とベータ4は、この問題に対する修正を持っています。

さらに、ConstraintLayoutでレイアウトパラメータをプログラムで作成するには、ConstraintLayout.LayoutParamsでvalidate()関数を呼び出してからビューに設定する必要があります。

+0

私はbeta3も使用しています。これは非常に奇妙です。インストールしたときにhttps://code.google.com/p/android/issues/detail?id=227030にエラーが表示されましたが、エラーが発生してもインストールは成功します。実際のconstraint-layout-1.0.0-beta3.aarファイルのmd5を調べました。正しいmd5を持っています(0b98641b30b62b65adbeba29d90d1107)ので、本当にbeta3と思われます。 – snoob

+0

私は同僚に制約レイアウト(エラーなしで成功)をインストールさせて、これを試してみて、私と同じ壊れた動作をします。 beta3を使用しています。 – snoob

+0

私はbeta1で正しく動作します。だから、これはβ2の回帰であるように見えます。私は私のマシンと私の同僚のマシンでこれを確認しました。アンドロイド5を搭載したネクサス6と、アンドロイド5,6,7を搭載したエミュレータ(すべて同じ動作)でテストされています。 – snoob

関連する問題