android - set ID to the view programmatically

2019-05-02 15:44发布

I'm adding Buttons programmatically and the number of Buttons depends on some conditions. To add rules for RelativeLayout.LayoutParams that Buttons be aligned to the top of each other I need to set their IDs. All the answers from 2-3 years ago say that setId(int) is okay (e.g. setId(1)) but now it's forbidden (UPD. it's not ok only with int literals. With int variables everything is ok. Wonder why). How to do it nowadays?

2条回答
太酷不给撩
2楼-- · 2019-05-02 16:40

According to the API it's not forbidden or deprecated. Here is the best way of using it.

  1. Create res/values/ids.xml and define

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
            <item type="id" name="button1" />
            <item type="id" name="button2" />
    </resources>
    
  2. once you have that, you can than use setId

    button1.setId(R.id.button1);
    button2.setId(R.id.button2);
    
查看更多
够拽才男人
3楼-- · 2019-05-02 16:44

Since you said you can have any number of buttons then you can set id for each button using -

button.setId(View.generateViewId()); //Works for API 17 and above

If minSdk is below 17, then you can use -

 button.setId(counter++); //Each time counter will be increment giving a unique id
查看更多
登录 后发表回答