1

ConstraintLayouts と Guidelines をプログラムでどのように作成しますか? 以下のコードを試して、ガイドラインを使用してビューを画面の中央に固定する単純なレイアウトを作成しましたが、画面の左側に赤い「v」ビューがレンダリングされます (スクリーンショットを参照)

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);
    }
}
4

2 に答える 2

2

のどのバージョンConstraintLayoutを使用していますか? あなたの例をベータ 3 で試すと、正しい動作が得られます。

ここに画像の説明を入力

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

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

于 2016-11-03T23:43:57.617 に答える
0

これはベータ 4 で修正されたバグでした。コードで ConstraintLayout.LayoutParams を設定した後、lp.validate() を呼び出す必要があることに注意してください。詳細については、https://code.google.com/p/android/issues/detail?id=227039をご覧ください。

于 2016-11-17T18:42:12.787 に答える