开发者

Custom view: nested linearlayout not showing up

开发者 https://www.devze.com 2023-03-13 07:43 出处:网络
I created a custom view. In it, theres a line, a textview, another line. beneath the bottom line, i wanted to put a new horizontally oriented linearlayout. when i run it, this nested linearlayout does

I created a custom view. In it, theres a line, a textview, another line. beneath the bottom line, i wanted to put a new horizontally oriented linearlayout. when i run it, this nested linearlayout doesnt seem to show up at all. Instead, i can see the test button right underneath the bottom line. what am i doing wrong?

    public class MyView extends LinearLayout   {

        public MyView(Context context, Question question) {
            super(context);



    //      this.setLayoutParams(params);
            this.setOrientation(VERTICAL);
            this.setBackgroundColor(Color.WHITE);
            LinearLayout.LayoutParams lineParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 2);
            View topLine = new View(context);
            lineParams.setMargins(0, 15, 0, 0);
            topLine.setBackgroundColor(Color.argb(255, 0, 159, 218));
            topLine.setLayoutParams(lineParams);

            this.addView(topLine);

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

            //Challenge Question
            TextView questionText = new TextView(context);
            questionText.setTextColor(Color.BLACK);
            questionText.setTextSize(14);
            questionText.setLayoutParams(params);
            questionText.setGravity(Gravity.CENTER_HORIZONTAL);
            questionText.setText(question.getQuestion());

            this.addView(questionText);

            View bottomLine = new View(context);
            bottomLine.setBackgroundColor(Color.argb(255, 0, 159, 218));
            bottomLine.setLayoutParams(lineParams);


            this.addView(bottomLine);

            LinearLayout innerLayout = new LinearLayout(context);
            LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(300, LayoutParams.WRAP_CONTENT);
            innerLayout.setLayoutParams(innerLayoutParams);
            innerLayout.setBackgroundColor(Color.RED);
            innerLayout.setOrientation(HORIZONTAL);


            //TableLayout for the multiple choices  
            TableLayout tableLayout = new TableLayout(context);
            LayoutParams tableLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    //      tableLayoutParams.weight = .8f;
            tableLayout.setBackgroundColor(Color.RED);
            tableLayout.setLayoutParams(tableLa开发者_如何学CyoutParams);


            innerLayout.addView(tableLayout);
            this.addView(innerLayout);

            Button button = new Button(context);
            button.setLayoutParams(params);
            button.setText("testing 123");
            this.addView(button);
}

Note that I pasted the code without all the stuff that I added to the tablelayout. I probably should have pasted that too. But it didn't work when I did that either. but either way, if i set the nested linearlayout to 300 width and set a background color of red to it, i should at least see it, no?


Think about what the height of the inner layout should be. Right now it is wrap_content and contains a TableLayout (with no rows) with its height also set to wrap_content. There doesn't seem to be anything in that inner layout giving it a height dimension, so that may be why it is not being displayed.

Trying the following will make your layout visible:

    LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(300, 300);

More usefully, you can try adding something with a real width/height to the TableLayout.

Also consider writing your layout in XML to better separate your application logic and the presentation.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号