2013-03-19 1 views
1

Мне нужно развить этот макет 15 раз на основной операции макета (размещены в 3 строки по 5 столбцов) и установить OnTouchListener для каждой кнопки padButton istances, wath - лучший способ сделать это?? Я пытаюсь раздуть макет, но не имеет понятия, чтобы установить слушатель разделено ...Установите OnTouchListener на несколько кнопок, содержащихся в xml, накачанных

макет, чтобы раздуть drumpad.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/padLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/pad" 
    android:orientation="vertical" 
    android:padding="3dp" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical|clip_horizontal|top" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/padButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/titles2" /> 

     <Button 
      android:id="@+id/padSelect" 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="15dp" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="21dp" > 

     <Button 
      android:id="@+id/padName" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="2dp" 
      android:background="#0f0f0f" 
      android:padding="2dp" 
      android:text="@string/pad" 
      android:textColor="#dfdfdf" 
      android:textSize="10sp" /> 

    </LinearLayout> 

</LinearLayout> 

основной раскладку (контейнер) activity_drum.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/DrumLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#999" 
    android:gravity="center" 
    android:orientation="vertical" 
    tools:context=".Drum" > 

</LinearLayout> 
+0

ли OnTouchListener всегда шов для каждой кнопки? Или вы хотите указать другое действие для каждой кнопки? –

+0

Однако я не уверен, что у вас может быть несколько кнопок с одним и тем же идентификатором ... –

+0

если я установил тег для каждой кнопки, я могу это сделать? Например: button.setTag и т. д. и т. д. Мне нужен пример, чтобы получить макет в правильном направлении. Я могу использовать цикл for? – kosma822

ответ

1

Я не уверен, что у вас может быть более одной кнопки с тем же идентификатором. Тем не менее, вы можете получить свой корневой вид, бросить его на ViewGroup. Используйте getChildCount() и getChildAt(), а также при необходимости. Например:

//we start from the root view 
ViewGroup rootViewGroup = findViewById(R.id.rootLinearLayout); 

for (int i = 0; i < this.getChildCount(); i++) { 
    View childView = this.getChildAt(i); 

    //is it a button? 
    if (childView instanceof Button) { 
     Button button = (Button) childView; 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //insert here the code 
      } 
     }); 
    } 

    if (childView instanceof ViewGroup) { 
     //iterate throught childView children 
    } 
} 

Хорошо, вы не можете взять этот код и поместить его на работу без какой-либо боли. Это всего лишь отправная точка. Но ...

Я думаю, что вам нужно пересмотреть свой подход и попытаться разработать свой собственный взгляд, я хотел бы использовать вид соединения, смотрите здесь:

http://developer.android.com/guide/topics/ui/custom-components.html#compound

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

EDIT

Может быть, вы можете найти полезную информацию здесь:

Add an array of buttons to a GridView in an Android application

и здесь:

http://developer.android.com/guide/tutorials/views/hello-gridview.html

и здесь (барабан машины):

http://mindtherobot.com/blog/420/android-beatz-making-a-drum-machine-app/

+0

большое спасибо! я попробую – kosma822

+0

, пожалуйста! –