Построение программно LinearLayout

Я пытаюсь заставить свой макет выглядеть следующим образом:

Мой класс, содержащий этот код, расширяет сам Linelayout и добавляет различные элементы с помощью addView

setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 LinearLayout line = new LinearLayout(context);
 line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 viewVerLabels = new VerLabelsView(context);
 // add y axis linearlayout & graphview
 line.addView(viewVerLabels);
 line.addView(new GraphViewContentView(context), new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1));
 line.setOrientation(LinearLayout.HORIZONTAL);
 // add to main linearlayout
 addView(line);
 LinearLayout line2 = new LinearLayout(context);
 line2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 viewHorLabels = new HorLabelsView(context);
 setOrientation(LinearLayout.VERTICAL);
 // add x axis labels
 line2.addView(viewHorLabels);
 // add to main linearlayout
 addView(line2);

Мой XML файл

С помощью этого кода я получаю метки Y-оси и график, но метки меток X отсутствуют

Я не могу получить то, что хочу, я пробовал несколько комбинаций, что я делаю неправильно

5 ответов

Здесь мой код, который позволил мне обойти проблему

graphViewStyle = new GraphViewStyle();
 paint = new Paint();
 graphSeries = new ArrayList<graphviewseries>();
 setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 setOrientation(LinearLayout.VERTICAL);
 LinearLayout line = new LinearLayout(context);
 line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 line.setOrientation(LinearLayout.HORIZONTAL);
 LinearLayout line2 = new LinearLayout(context);
 line2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 line2.setOrientation(LinearLayout.HORIZONTAL);
 txt = new TextView(mContext);
 addView(txt);
 GraphViewContentView graphContentView = new GraphViewContentView(context);
 graphContentView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 260, 1));
 line.addView(graphContentView);
 viewVerLabels = new VerLabelsView(context);
 viewVerLabels.setLayoutParams(new LayoutParams(30, 260));
 viewHorLabels = new HorLabelsView(context);
 viewHorLabels.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 15));
 line.addView(viewVerLabels);
 addView(line);
 line2.addView(viewHorLabels);
 TextView v = new TextView(context);
 v.setLayoutParams(new LayoutParams(30, 15));
 line2.addView(v);
 addView(line2);
</graphviewseries>


Кажется, это проблема размера, когда при добавлении первых макетов к родительскому элементу они заполняют всю область, а остальные отображаются только сейчас.

Как другие упоминания, рекомендации (я бы попробовал либо один независимый) - Прокрутка Просмотр в верхней части всего. - Создайте отдельный элемент управления, который простирается от LinearLayout с соответствующим layout.xml, который просто раздувается внутри. И в этом упражнении, когда вы просто создаете экземпляр этого элемента управления и добавляете только один макет, в котором есть все. - Создайте новый LinearLayout в верхней части всего, добавьте все к нему, а затем добавьте его в фактический вид.

Если какая-либо работа или у вас есть решение, опубликуйте ее, чтобы другие могли видеть и извлекать выгоду.


Привет, просто попробуйте этот код. Я изменил некоторые значения, представления и setBackground на цвета, он дает тот же результат, что и вы.

LinearLayout MLayoutTm = (LinearLayout) findViewById (R.id.graph2);

LinearLayout line = new LinearLayout(this);
 line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 0, 1));
 line.setBackgroundColor(Color.BLUE);
 TextView viewVerLabels = new TextView(this);
 viewVerLabels.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
 viewVerLabels.setText("Nimsih");
 viewVerLabels.setBackgroundColor(Color.RED);
 line.addView(viewVerLabels);
 TextView GraphViewContentView = new TextView(this);
 GraphViewContentView.setBackgroundColor(Color.MAGENTA);
 GraphViewContentView.setText("Nimsih2");
 GraphViewContentView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
 LayoutParams.MATCH_PARENT, 1));
 line.addView(GraphViewContentView);
 line.setOrientation(LinearLayout.HORIZONTAL);
 MLayoutTm.addView(line);
 LinearLayout line2 = new LinearLayout(this);
 line2.setBackgroundColor(Color.RED);
 line2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
 TextView viewHorLabels = new TextView(this);
 viewHorLabels.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
 1));
 viewHorLabels.setBackgroundColor(Color.CYAN);
 viewHorLabels.setText("Nimsih3 ");
 MLayoutTm.setOrientation(LinearLayout.VERTICAL);
 line2.addView(viewHorLabels);
 MLayoutTm.addView(line2);


попробуйте установить разные цвета фона в макеты, которые вы создали, чтобы увидеть их реальные области. Скорее всего, некоторые макеты занимали всю доступную высоту, поэтому метки оси X находятся за пределами границы. Вы можете назначить какой-то вес для макетов, например общую сумму веса, как 5, назначить 4 для области рисования и установить 1 в макет, который содержит метки оси X


Я наблюдаю за осью осей X и осью оси y, используя код arnodenhond. вы можете получить от http://android.arnodenhond.com/components

снимок экрана эмулятора

licensed under cc by-sa 3.0 with attribution.