2014-12-14 3 views
0

Я создаю приложение, которое будет управлять микроконтроллером через Bluetooth. (Это будет матрица с разрешением 8x32). Идея состоит в том, чтобы создать массив строк из 8 строк 32 столбцов, каждый элемент представляет на реальном светодиоде на плате.Создайте массив 8x32 программ ImageButtons программно

После некоторой документации я решил использовать TableLayout и заполнить ее с помощью ImageButtons. Но он не может заставить его работать.

Это то, что я сделал до сих пор:

public class DrawerMode extends Activity implements View.OnTouchListener{ 
private static int numberOfColumns = 32; 
private static int numberOfRows = 8; 
private TableLayout tableLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    //Assign content 
    setContentView(R.layout.activity_draw_mod); 
    tableLayout = (TableLayout) findViewById(R.id.drawer_table); 
    fillTable(numberOfColumns,numberOfRows, tableLayout); 


} 

private void fillTable(final int numberOfColumns,final int numberOfRows, TableLayout tableLayout) { 
    //removing child views 
    tableLayout.removeAllViews(); 
    TableLayout.LayoutParams params = new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT); 

    //initiate rows 
    TableRow[] tableRow = new TableRow[numberOfRows]; 
    for(int iter_R = 0; iter_R < numberOfRows; iter_R++){ 
     //fill rows with buttons 
     tableRow[iter_R] = new TableRow(this); 
     ImageButton[] imageButton = new ImageButton[numberOfColumns]; 
     for(int iter_C = 0; iter_C < numberOfColumns; iter_C++){ 
      imageButton[iter_C] = new ImageButton(this); 
      imageButton[iter_C].setBackgroundColor(Color.WHITE); 
      imageButton[iter_C].setLayoutParams(params); 

      //[iter_C] 
      imageButton[iter_C].setOnTouchListener(this); 
      imageButton[iter_C].setId(iter_C); 
      imageButton[iter_C].setTag(iter_C); 
      //add an instance of a button 
      tableRow[iter_R].addView(imageButton[iter_C]); 
     } 
     //add instance of row 
     tableLayout.addView(tableRow[iter_R]); 
    } 
} 



@Override 
public boolean onTouch(View v, MotionEvent event) { 
    int selected_element = (Integer) v.getId(); 
    Toast.makeText(getApplicationContext(), "It's"+ selected_element, Toast.LENGTH_LONG).show(); 
    return false; 
} 
} 

Вот содержимое файла XML в:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_menu" 
android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" 
android:background="@android:color/holo_green_dark"> 
<TextView 
    android:id="@+id/draw_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/draw_mode_name" 
    android:layout_centerHorizontal="true" 
    android:textSize="24sp" 
    android:textColor="@android:color/white" 
    /> 
<TableLayout 
    android:id="@+id/drawer_table" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@id/draw_title" 
    > 

    </TableLayout> 

Какой самый лучший способ для меня, чтобы сделать это ?

+0

Что значит «Но не может заставить его работать»? Что с этим не так? – eleven

+0

Ничего не отображается. :(Добавил xml-файл, возможно, я что-то упустил. –

ответ

0

Я не могу принять ни один из ответов, так как они не разрешают его с помощью TableLayout. В конце концов, после более детального поиска я нашел большой учебник для решения этого:

Brian's Video Tutorials

Проверка динамических кнопок и изображений учебника. Для этого решения все зависит от Брайана.

я встретил проблему с этим, но вроде решил его для моей цели, которые могут быть проверены здесь:

Scaling problem

Спасибо как Патрик и Fox для своих ответов. Если кто-то может опубликовать еще одно подробное решение с TableLayout, другое, кроме этого, я приму этот ответ.

0

Вы можете создать 8 LinearLayout с идентификатором, а затем добавить 32 кнопки к каждому из них.

+0

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

+0

Что касается вертикального LinearLayout в XML, то петля вертикально, чтобы создать горизонтальный LinearLayout, затем циклически горизонтально создавать кнопки внутри каждого горизонтального макета? –

+0

Это может сработать, но я хотел бы прямое и ясное решение без обходных решений :). Но я буду помнить о вашей идее. –

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