android-以编程方式将ID设置为视图

android-以编程方式将ID设置为视图,android,view,programmatically-created,Android,View,Programmatically Created,我以编程方式添加按钮,按钮的数量取决于某些条件。若要为相对Layout.LayoutParams添加规则,使按钮相互对齐,我需要设置它们的ID。2-3年前的所有答案都说setId(int)是可以的(例如setId(1)),但现在它被禁止了(UPD。不仅int文本可以。int变量一切都可以。不知道为什么)。现在怎么做呢?根据法律规定,这是不被禁止或反对的。以下是使用它的最佳方式 创建res/values/ids.xml并定义 <?xml version="1.0" encoding="utf

我以编程方式添加按钮,按钮的数量取决于某些条件。若要为相对Layout.LayoutParams添加规则,使按钮相互对齐,我需要设置它们的ID。2-3年前的所有答案都说setId(int)是可以的(例如setId(1)),但现在它被禁止了(UPD。不仅int文本可以。int变量一切都可以。不知道为什么)。现在怎么做呢?

根据法律规定,这是不被禁止或反对的。以下是使用它的最佳方式

  • 创建
    res/values/ids.xml
    并定义

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
            <item type="id" name="button1" />
            <item type="id" name="button2" />
    </resources>
    

  • 既然您说过可以有任意数量的按钮,那么您可以使用-

    button.setId(View.generateViewId()); //Works for API 17 and above
    
    如果
    minSdk
    低于17,则可以使用-

     button.setId(counter++); //Each time counter will be increment giving a unique id
    

    谁说这是禁止的?@ShadabAnsari它用红色下划线,方法本身有一个注释IdRes@ShadabAnsari当我在循环中执行“setId(I)”时,虽然我检查了从第二个开始的“previous”id,但它为previous按钮抛出了NullPointerException。当我尝试“setId(1)”时,它用红色下划线。谢谢你的回答,我要检查一下是的,这是因为函数定义是
    public void setId(@IdRes int id)
    ,它强制你传递一个id资源。很高兴它起了作用。它不再是NPE了。但我无法解决我的主要问题——尽管我写了“lp.addRule(RelativeLayout.ALIGN_TOP,buttons[I-1].getId());”然后将其设置为buttons,但它们仍然相互重叠……这是另一个问题。您需要在按钮中添加另一个LeftOf或RightOf规则。这里有一个解决方案-解决它!非常感谢!刚刚将“对齐顶部”替换为“下方”。还有一个问题(我知道这也是另一个话题,但也许我很幸运):如何将编程创建的RL放在屏幕外的底部?(“rlp.addRule(RelativeLayout.ALIGN\u PARENT\u BOTTOM)”没有帮助,它放在左上角)仅与API 17+一起使用。我的sdkMin就是答案。太奇怪了。。。使用整型文字(红色下划线)不合适,但可以使用整型变量
     button.setId(counter++); //Each time counter will be increment giving a unique id