0

Я пытаюсь реализовать дисплей HUD на моей клавиатуре cutsom. HUD будет содержать пары ключей/значений. Мне нужно программно создать TableLayout и нарисовать его на моем холсте. Для того, чтобы сделать это, я перекрывая keyboardview OnDraw() метод:Android - Dynamic TableLayout не отображается

@Override 
public void onDraw(Canvas canvas) { // In the custom MyKeyboardView class 
    MyHUD hud = new MyHUD(getContext()); 
    super.onDraw(canvas); 
    hud.tl.draw(canvas); //tl being the TableLayout to draw 
} 

MyHUD класс:

public class MyHUD { 

    public TableLayout tl; 
    private MyData mData; 

    public MyHUD(Context context) { 

     TableRow.LayoutParams trParams = new TableRow.LayoutParams(
     TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT); 
     TableLayout.LayoutParams tlParams = new TableLayout.LayoutParams(
     TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT); 

     tl = new TableLayout(context); 
     tl.setLayoutParams(tlParams); 

     for (int i = 0; i < 10; i++) { 

     TableRow tr = new TableRow(context); 
     tr.setId(100+i); 
     tr.setLayoutParams(trParams); 

     TextView charTV = new TextView(context); 
     charTV.setId(200+i); 
     charTV.setText("Hello " + i); 
     charTV.setTextColor(Color.RED); 
     //charTV.setLayoutParams(trParams); 
     tr.addView(charTV); 

     TextView keyTV = new TextView(context); 
     keyTV.setId(300+i); 
     keyTV.setText("world " + i); 
     keyTV.setTextColor(Color.CYAN); 
     //keyTV.setLayoutParams(trParams); 
     tr.addView(keyTV); 

     tl.addView(tr, tlParams); 
     }  
    } 
} 

(Обратите внимание, что в настоящее время не существует не выборку данных, просто «Привет мир» для в целях тестирования). Я прокомментировал макеты TextView, как видно на нескольких других сообщениях, но это, похоже, не проблема.


Альтернативный вариант:

Вместо instanciating в TableLayout с помощью конструктора, я пытался что-то вроде:

tl = (TableLayout) findViewById(R.id.my_hud); 

Наряду со следующим XML:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:stretchColumns="0,1" 
     android:id="@+id/my_hud" > 
</TableLayout> 

проблема заключается в том, что метод findViewById не определен для моего пользовательского класса.

Любая идея, почему это неправильно рисует TableLayout?

+0

Hum Я просто подумал об этом: правильно ли, что я использую контекст клавиатуры, чтобы стимулировать элементы макета? –

ответ

0

Я не думаю, что это будет так просто, но вот чего не хватало:

hud.tl.measure(canvas.getWidth(), canvas.getHeight()); 
    hud.tl.layout(0, 0, canvas.getWidth(), canvas.getHeight()); 

Теперь TableLayout правильно нарисован. Успех.

 Смежные вопросы

  • Нет связанных вопросов^_^