如何设置动态创建布局的ID?

abh*_*eta 64 android android-view

我想给ID在布局一些看法(TextView的,ImageView的等),其programmetically创建.那么设置ID的最佳方法是什么.

Yug*_*abu 116

您可以创建一个ids.xml文件,并将所有必需的ID放在其中,如下所示

<?xml version="1.0" encoding="utf-8"?>
<resources>
        <item type="id" name="layout1" />
        <item type="id" name="layout2" />
        <item type="id" name="layout3" />
</resources>
Run Code Online (Sandbox Code Playgroud)

现在,对于动态创建的布局或视图,您可以使用以下ID

new_layout1.setId(R.id.layout1);
new_view2.setId(R.id.layout2);
new_layout3.setId(R.id.layout3);
Run Code Online (Sandbox Code Playgroud)

我希望它可以帮助你.

  • @Nordvind我给了一个想法来abhishek ameta不完整的解决方案.他没有提到任何Android版本要求.<?xml ...>声明是基本的东西,所以任何android开发人员都会写入*.xml文件.**我告诉它会在所有版本的android中工作吗?**我的代码有什么问题?如果您有相同的要求,您正在使用我的答案,并有任何问题问我,不要这样评论. (19认同)
  • 这仍然没有解释如何设置动态的id (6认同)
  • 动态创建视图的要点是您可能不知道需要多少个视图或何时需要它们。在资源中预设 ID 并没有多大帮助。 (3认同)

Var*_*tia 45

Google终于意识到需要为编程创建的视图生成唯一ID ...

从API级别17及以上,一次可以调用View.generateViewId()

  • 我如何访问我刚刚生成的那个ID? (3认同)
  • 如果您定位较低的API级别,也可以使用ViewCompat.generateViewId() (2认同)

Nag*_*ddy 17

创建文件夹res/values/ids.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>   
   <item name="refresh" type="id"/>   
   <item name="settings" type="id"/>        
</resources>
Run Code Online (Sandbox Code Playgroud)

在Activity类中调用这样

ImageView refreshImg = new ImageView(activity);
ImageView settingsImg = new ImageView(activity); 

     refreshImg.setId(R.id.refresh);
     settingsImg .setId(R.id.settings);
Run Code Online (Sandbox Code Playgroud)

  • 这与接受的答案有何不同? (6认同)
  • 有人询问**动态**创建的布局. (3认同)

jee*_*eet 15

这不会工作:

layout.setId(100);
Run Code Online (Sandbox Code Playgroud)

但是,这将:

int id=100;
layout.setId(id);
Run Code Online (Sandbox Code Playgroud)

此外,这个也是(信用:Aaron Dougherty):

layout.setId(100+1);
Run Code Online (Sandbox Code Playgroud)

  • 实际上它没有如果你做int id = 100.显然如果你加上数字它工作正常.不要得到那个xD (4认同)
  • /谢谢@MateuszWinnicki,奇怪的添加使得差异化.setId(100)不起作用,但setId(99 + 1)确实有效 (2认同)

San*_*0rd 5

出于兼容性目的,请使用: ViewCompat.generateViewId()