2016-09-02 8 views
18

iOSでは、ストーリーボードを削除し、Cartographyフレームワークを使用してすべてのコードを整理するという大きなファンです。これは、Cartographyのgithubから盗まれたものです。Androidの制約レイアウトはプログラム的には?

constrain(view1, view2) { view1, view2 in 
    view1.width == (view1.superview!.width - 50) * 0.5 
    view2.width == view1.width - 50 
    view1.height == 40 
    view2.height == view1.height 
    view1.centerX == view1.superview!.centerX 
    view2.centerX == view1.centerX 

    view1.top >= view1.superview!.top + 20 
    view2.top == view1.bottom + 20 
} 

Android用に同等のものはありますか?新しい制約レイアウトは正しい方向に進んでいるようですが、プログラムでそれをやりたいと思います。

+0

なぜあなたはそれをしないだろうXMLを使用して? – Zoe

+4

人々がこれをプログラムで実行したい理由はたくさんあります。たとえば、事前定義されたUIを持つアプリケーション以外のライブラリを開発している場合や、実行時にユーザインタラクションの影響を受けるレイアウト仕様を変更する必要がある場合などです。 Googleがこの新機能に関するドキュメントを本当に欠いている – yongsunCN

+2

別の(単純な)理由、@ Polarbear0106は、TransitionManager、特に 'TransitionManager.beginDelayedTransition(root);'を使用する必要がある場合、レイアウト変更を手動で指定する必要があります次のパスで描画されます。ですから、プログラムでプログラムを修正する必要があるときがあります。あなたはモップヘッド@Martin Marconciniを着て私の場合は –

答えて

34

ゲームに少し遅れますが、基本的には制約レイアウト内のビューを独自のLayoutParamsを持つ通常のビューとして扱う必要があります。 ConstraintLayoutの場合

は、ドキュメントは次の場所にあります。https://developer.android.com/reference/android/support/constraint/ConstraintLayout.LayoutParams.html

このクラスは、ビューがConstraintLayout内にレイアウトされるようにする方法を指定するさまざまな属性が含まれています。実行時に制約を構築するには、ConstraintSetを使用することをお勧めします。

したがって、ConstraintSetを使用することをお勧めします。

そこには素敵なコードサンプルがありますが、コアコンセプトは(/ cloning/newをコピーするなどして)新しいセットを作成し、そのプロパティを設定してレイアウトに適用する必要があるということです。

例:あなたのレイアウトは(ここではmConstraintLayoutと呼ばれる)ConstraintLayoutが含まれており、それがビュー(サンプルでR.id.go_button)が含まれて内側に、あなたができると仮定します。

ConstraintSet set = new ConstraintSet(); 

    // You may want (optional) to start with the existing constraint, 
    // so uncomment this. 
    // set.clone(mConstraintLayout); 

    // Resize to 100dp 
    set.constrainHeight(R.id.go_button, (int)(100 * density)); 
    set.constrainWidth(R.id.go_button, (int)(100 * density)); 

    // center horizontally in the container 
    set.centerHorizontally(R.id.go_button, R.id.rootLayout); 

    // pin to the bottom of the container 
    set.connect(R.id.go_button, BOTTOM, R.id.rootLayout, BOTTOM, 8); 

    // Apply the changes 
    set.applyTo(mConstraintLayout); 
    // this is my… (ConstraintLayout) findViewById(R.id.rootLayout); 
+5

は、 –

+0

を追加する前に、現在の制約をコピーする set.clone(mConstraintLayout) を追加する必要がありましたか? –

+1

@TomHoward私は敢えていないだろう! ;)(興味があるなら、http://www.thinkgeek.com/product/f0d0/)将来リンクがうまくいかない場合は、google "Dwarven Beard Hat"(私は@オタクと思う)を5年前。 –

関連する問題