0

私はLinearLayout縦向きで、それに 3 つのサブビューを追加しようとしています。1 つのビューはボックスを描画するだけの高さ 50px の小さなビューで、2 つ目のビューはラジオ ボタンの水平方向のリストで、3 つ目のビューはグラフです。

グラフを最後に追加すると、すべてが画面に収まりますが、最初にグラフを追加すると、すべてが画面外に押し出され、画面上の唯一のビューになります。グラフは、できるだけ大きくしたい私のカスタムコントロールです(そのonMeasure関数は、提供された幅と高さを返すだけです)。これが問題の場所だと思います。しかし、私はそれをできるだけ大きく保ち、追加された順序に関係なくレイアウトをビューに合わせたいと思っています。

これは可能ですか?もしそうなら、どうすればそれを達成できますか?最終的に、グラフを上に置き、他の 2 つのコントロールをその下に配置しようとしていますが、最初にグラフを追加すると、画面全体が消費されます。

ビューを作成するために使用しているコードは次のとおりです。これは学校の課題であり、XML レイアウトを使用できません。私はコントロールを作成するように割り当てられており、それを完了しました。コントロールを見せびらかすための簡単なアクティビティを作成しようとしています。

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        layout.addView(new MovingBox(this));

        RadioGroup radioGroup = new RadioGroup(this);
        radioGroup.setOrientation(RadioGroup.HORIZONTAL);
        radioGroup.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

        RadioButton button = new RadioButton(this);
        button.setText("Light");
        button.setLayoutParams(new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.WRAP_CONTENT, 1));
        radioGroup.addView(button);

        button = new RadioButton(this);
        button.setText("Dark");
        button.setLayoutParams(new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.WRAP_CONTENT, 1));
        radioGroup.addView(button);

        button = new RadioButton(this);
        button.setText("Colorful");
        button.setLayoutParams(new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.WRAP_CONTENT, 1));
        radioGroup.addView(button);

        layout.addView(radioGroup);

        // If I move these next to lines just below layout.setOrientation(...) it becomes the only thing visible
        TweenerControl tw = new TweenerControl(this);
        layout.addView(tw);

        setContentView(layout);
    }
}

グラフを最後に追加: (すべてが適合しますが、グラフを一番上にしたいです)

最後にグラフを追加

最初にグラフを追加: (グラフのみが表示されます)

最初にグラフを追加する

4

1 に答える 1

0

私はこれにさらに取り組みましたが、私が思いついた解決策は、代わりにLinearLayout使用せずに使用することです。は、物事が適切に収まるように配置とサイズ変更を試みますが、物事のサイズを取得して上から下の順序で配置するだけです。RelativeLayoutRelativeLayoutLinearLayoutLinearLayoutLinearLayout

于 2012-09-27T17:08:57.580 に答える