Создание макета внутри класса View-extended - PullRequest
0 голосов
/ 14 февраля 2010

Я все еще довольно новичок в разработке под Android, и я не смог найти ни одного примера, как это сделать.

В своей Деятельности я использую "setContextView (new myViewClass)", чтобы назначить класс с расширенным представлением в качестве загружаемого. Все отлично работает с точки зрения загрузки представления, где я создаю различные элементы (LinearLayouts, кнопки и т. Д.) На основе ряда условий. К сожалению, я не могу заставить ни один из этих элементов действительно появляться на экране.

Полагаю, мой вопрос направлен на большее понимание взглядов. Все примеры, которые я видел, касаются установки XML-файла в качестве базового представления и последующего изменения его в коде. Есть ли альтернатива этому?

Спасибо.

Вот пример кода, который я пытался заставить работать. Есть и другие вещи, но это важная информация. Для контекста программы этот класс обоснован с setContextView(new createView(this)):

public createView(Context c){
    super(c);

    // Create a simple layout
    LinearLayout layout = new LinearLayout(top.getContext());
    layout.setOrientation(LinearLayout.VERTICAL);


    // Create test text
    TextView mTestText = new TextView(c);
    mTestText.setText("This is a test");

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.setMargins(10, 10, 10, 10);
    layout.addView(mTestText, lp);
}

1 Ответ

1 голос
/ 14 февраля 2010

Я думаю, проблема в том, что вы не добавляете макет в CreateView . Однако класс View не имеет метода add (см. http://developer.android.com/reference/android/view/View.html).

Поскольку LinearLayout является базовым представлением для вашего расширенного представления, вы можете вместо этого расширить LinearLayout и добавить TextView в свой расширенный класс. Если вы сделаете это, ваш CreateView класс, вероятно, будет выглядеть примерно так:

/**
 * Since the LinearLayout is the base layout, we'll extend it.
 */
public class CreateView extends LinearLayout {
    public CreateView(Context context) {
        super(context);
        setOrientation(LinearLayout.VERTICAL);

        TextView mTestText = new TextView(context);
        mTestText.setText("This is a test");

        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        lp.setMargins(10, 10, 10, 10);
        addView(mTestText, lp);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...