2010-02-14 2 views
0

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

В моей работе я использую «setContextView (новый 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

Я думаю, что проблема в том, что вы не добавляете макет по своему CreateView. Однако, Вид класс не имеет добавить метод (см. 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); 
    } 
} 
+0

Спасибо. Но теперь, когда у меня есть этот макет, как мне заставить его отображаться на экране? Я считаю, что представление, созданное в моем классе, не привязано к экрану. Нужно ли мне что-то возвращать, использовать надуватель и т. Д.? – duanemat

+0

Либо добавьте представление в другое представление на экране, либо установите его как представление содержимого. Используйте ** setContentView ** в своей деятельности, чтобы установить его как основной вид. Если вам нужен небольшой пример, я заархивировал свой маленький тест для класса в своем ответе: http://www.box.net/shared/j9x3076702 – Klarth