我在Activity
中有16个Button
s,我必须在onCreate()中初始化这些。是否有任何方法来初始化所有按钮在一个单行代码?(循环等)。代码应该从XML
中取出所有按钮R.id.
。布局和处理....
假设您将按钮命名为button_0, button_1, .. button_15
。你可以这样做:
for (int i = 0; i < 16; i++) {
int id = getResources().getIdentifier("button_"+i, "id", getPackageName());
button[i] = (Button) findViewById(id);
}
如果这16个按钮都在一个视图或布局中,那么你可以这样做:
ArrayList<View> allButtons;
allButtons = ((LinearLayout) findViewById(R.id.button_container)).getTouchables();
这假定您的容器(在本例中为LinearLayout
)不包含非Button
的Touchable
。
- 使用Butterknife视图注入库
- 下载Android ButterKnife Zelezny插件
Android Studio
或Intellij IDEA
和初始化所有的视图从当前布局 1点击
对于xamarin android:
List<Button>() allButtons = new List<Button>();
for (int i = 1; i < 15; i++)
{
int id = this.Resources.GetIdentifier("btn" + i.ToString(), "id", this.PackageName);
Button btn = (Button)FindViewById(id);
allButtons.Add(btn);
}
这个方法获取布局中的所有按钮,希望对您有所帮助。易于实现&你可以在几乎所有项目中使用它,不需要库。
public List<Button> getAllButtons(ViewGroup layout){
List<Button> btn = new ArrayList<>();
for(int i =0; i< layout.getChildCount(); i++){
View v =layout.getChildAt(i);
if(v instanceof Button){
btn.add((Button) v);
}
}
return btn;
}
List<Button> btn_list = getAllButtons(myRelativeLayout);
Button my_btn = btn_list.get(0);
my_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("btn_test", "onClick: hello");
}
});
如果您正在使用Kotlin,并且您的按钮的id形式为button1, button2…Button16 ,你可以这样做:
var btn = ArrayList<Button>(16)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_game_screen)
for(i in 0 until 16) {
var id = resources.getIdentifier("button"+(i+1), "id", packageName)
btn.add(findViewById<View>(id) as Button)
btn[i].setText("something") //or do whatever now
}
}
如果您只知道容器id或按钮id都不同,请尝试:
活动(在setContentView之前创建方法)
List<Integer> idButtons= new ArrayList<>();
//container_button is my button container
RelativeLayout containerButton = findViewById(R.id.container_button);
for(int i =0; i < containerButton.getChildCount(); i++){
View v = containerButton.getChildAt(i);
if(v instanceof Button){
idButtons.add(((Button) v).getId());
}
}
布局<RelativeLayout
android:id="@+id/container_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:layout_weight="1"
android:layout_marginEnd="0dp">
<Button
android:id="@+id/buttonac"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/red_button"
android:textColor="@android:color/white"
android:text="AC"
android:onClick="pulsacion" />
<Button
android:id="@+id/buttondel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/buttonac"
android:layout_alignBottom="@+id/buttonac"
android:background="@drawable/red_button"
android:textColor="@android:color/white"
android:text="DEL"
android:onClick="pulsacion" />
[...]
</RelativeLayout>