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

Posted

技术标签:

【中文标题】android - 以编程方式将 ID 设置为视图【英文标题】:android - set ID to the view programmatically 【发布时间】:2016-03-18 00:51:39 【问题描述】:

我以编程方式添加 ButtonsButtons 的数量取决于某些条件。要为 RelativeLayout.LayoutParams 添加规则以使 Buttons 彼此顶部对齐,我需要设置它们的 ID。 2-3 年前的所有答案都说 setId(int) 没问题(例如 setId(1)),但现在被禁止了(UPD. 不能只使用 int 字面量。使用 int 变量一切正常。不知道为什么)。现在怎么办?

【问题讨论】:

谁说禁止的? @ShadabAnsari 用红色下划线,方法本身有注解IdRes 【参考方案1】:

根据API,它没有被禁止或弃用。这是使用它的最佳方式。

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

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

    一旦你有了它,你就可以使用setId

    button1.setId(R.id.button1);
    button2.setId(R.id.button2);
    

【讨论】:

当我尝试“setId(1)”时,它带有红色下划线。谢谢你的回答,去看看 是的,这是因为函数定义是public void setId(@IdRes int id),它强制你传递一个ID资源。很高兴它有帮助。 它不再是 NPE。但我无法解决我的主要问题——尽管我写了“lp.addRule(RelativeLayout.ALIGN_TOP,buttons[i-1].getId());”但它们仍然相互重叠然后将其设置为按钮... 这是一个不同的问题。您需要向按钮添加另一个规则 LeftOf 或 RightOf。这里有一个解决方案-***.com/questions/10700273/… 解决了!非常感谢!刚刚将“ALIGN_TOP”替换为“BELOW”。还有一个问题(我知道这也是另一个话题,但也许我很幸运):如何将编程创建的 RL 放在屏幕底部但在屏幕之外? (“rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)” 没有帮助,它被放置在左上角)【参考方案2】:

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

为每个按钮设置 id
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

【讨论】:

仅适用于 API 17+。我的 sdkMin 是 15 编辑了答案。 太奇怪了......使用 int 字面量(红色下划线)不行,但可以使用 int 变量

以上是关于android - 以编程方式将 ID 设置为视图的主要内容,如果未能解决你的问题,请参考以下文章

Android以编程方式设置视图边距

如何以编程方式将 ID 分配给视图?

如何将文本设置为 Android 中的按钮,即希腊字体?例如:ή έ ΰ

以编程方式设置 android:animateLayoutChanges

android - 获取以编程方式创建的视图的估计高度

以编程方式创建一个视图,将框架设置为超级视图的框架?