如何在安卓上一次性获取所有按钮ID



我在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)不包含非ButtonTouchable

  1. 使用Butterknife视图注入库
  2. 下载Android ButterKnife Zelezny插件Android StudioIntellij 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>

最新更新