Справка по Android LinearLayout или RelativeLayout - PullRequest
2 голосов
/ 03 июня 2010

Мне нужно создать два представления программно (потому что мне нужно получить доступ к выводу одного из представлений). По какой-то причине, независимо от того, что я делаю, чтобы добавить представления в представление содержимого, они не отображаются вертикально друг над другом, один под другим.

Я могу сделать это прекрасно, используя XML, используя RelativeLayout и расположение макетов, но с XML я не могу создать объект представления и перегрузить метод ondraw.

Что я делаю не так с программным подходом и как мне решить эту проблему?

LinearLayout mLinearLayout;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a LinearLayout in which to add the ImageView
        mLinearLayout = new LinearLayout(this);

        TextView tv = new TextView(this);
            tv.setBackgroundColor(0xff333333);
        tv.setText("Enter your member number:");
        tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));



        DrawableView i = new DrawableView(this);
        i.layout(0,40,0,0);
        i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));

        mLinearLayout.addView(tv);
        mLinearLayout.addView(i,300,300);
        setContentView(mLinearLayout);
    }

Ответы [ 3 ]

1 голос
/ 03 июня 2010

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

Во-первых, вам не удалось установить вертикальную ориентацию для линейного макета. Для горизонтальной ориентации все будет одной линией. Для вертикального макета каждый виджет будет на отдельной строке, идущей сверху вниз.

Во-вторых, «Fill Parent» выглядит подозрительно. Любой родительский элемент заполнения, если только это не предотвращается относительным макетом или абсолютным размером, захватывает все и скрывает все остальные виджеты. Это почти всегда неправильное решение. Попробуйте вместо этого использовать вес.

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

1 голос
/ 03 июня 2010

Вы пробовали установить ориентацию макета на вертикаль:

mLinearLayout.setOrientation(1);

1 голос
/ 03 июня 2010

Вы можете установить ориентацию объекта линейного макета на вертикальное

...