android - 以编程方式将 ID 设置为视图
Posted
技术标签:
【中文标题】android - 以编程方式将 ID 设置为视图【英文标题】:android - set ID to the view programmatically 【发布时间】:2016-03-18 00:51:39 【问题描述】:我以编程方式添加 Buttons,Buttons 的数量取决于某些条件。要为 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】:
既然你说你可以有任意数量的按钮,那么你可以使用 -
为每个按钮设置 idbutton.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 中的按钮,即希腊字体?例如:ή έ ΰ