5

私には習慣がありますView。ビューのコンストラクターで、2 つのサブビューを作成して追加します。ただし、使用するLayoutParams.addRule()といくつかの問題が発生します。仕事などのルールCENTER_HORIZONTALですが、使おうとするABOVEとサブビューが高さ0になってしまいます。

コンストラクターのコードは次のとおりです。

    setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));


    mLayoutParams = new LayoutParams(width, height);
    mLayoutParams.leftMargin = left;
    mLayoutParams.topMargin = top;

    mImage = new ImageView(getContext());
    mImage.setImageDrawable(getResources().getDrawable(R.drawable.my_image_drawable));
    mImage.setScaleType(ScaleType.FIT_XY);
    mImage.setId(R.id.my_image_id);
    addView(mImage, mLayoutParams);

    mText = new TextView(getContext());
    mText.setText(R.string.my_text);
    mText.setId(R.id.my_text_id);
    LayoutParams textParams = new LayoutParams(200, 40);
    // textParams.addRule(CENTER_HORIZONTAL, TRUE); //Works
    textParams.addRule(ABOVE, mImage.getId()); //Doesn't work

    addView(mText, textParams);

デバイス モニターを使用してエミュレーターでビューを調べるとlayout_height、テキストの が 40 であることがわかりますが、上部、下部、および高さのパラメーターはすべて 0measuredHeightです。画面の幅と同じように見えます。

  1. ルールの追加に何か問題がありますか?
  2. ルールを追加するより良い場所はありますか? 最初に何かが起こる必要がありますか?
  3. 他の選択肢はありますか?高さをFILL_PARENT TextView、重力 BOTTOM にし、その下マージンを画像の高さに設定することはできますが、テキストの上に別のビューを追加できるようにする必要がありますが、これは機能しません。
4

2 に答える 2

0
// try this
mText = new TextView(getContext());
mText.setText(R.string.my_text);
mText.setId(R.id.my_text_id);
RelativeLayout.LayoutParams textParams = new RelativeLayout.LayoutParams(200, 40);
// textParams.addRule(CENTER_HORIZONTAL, TRUE); //Works
textParams.addRule(RelativeLayout.ABOVE, mImage.getId()); //Doesn't work

addView(mText, textParams);
于 2013-09-04T04:44:11.363 に答える