我需要在主布局活动上对此布局进行15次充气(按3行排列5列),并为每个按钮padButton
设置OnTouchListener,wath是最好的方法吗?我尝试膨胀布局,但没有想法将侦听器分开......
扩展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 :(得分:1)
我不确定您是否可以拥有多个具有相同ID的按钮。但是,您可以获取根视图,将其转换为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
你需要一点练习,但我认为这对你的目的很有帮助。
修改强>
也许你可以在这里找到一些有用的信息:
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/