【问题标题】:Android create ID programmatically [duplicate]Android以编程方式创建ID [重复]
【发布时间】:2013-02-28 15:26:29
【问题描述】:

我正在寻找在不使用 XML 声明的情况下在代码中创建 ID。例如,我有代码,我在其中以编程方式创建这样的视图

@Override
protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.new_layout);

  LinearLayout ll = (LinearLayout)findViewById(R.id.layout);
  View v = new View(this);
  v.setBackgroundColor(0xFFFF0000);
  ll.addView(v, 100, 100);

}

我可以添加v.setId(50),但我想添加v.setId(R.id.some_id),我不想将some_id 添加到xml 文件中,我知道这个选项。

我的问题是,如何以编程方式创建 R.id.some_id 而无需在 XML 文件中设置它。谢谢

【问题讨论】:

    标签: java android


    【解决方案1】:

    参考这个奇妙的答案:https://stackoverflow.com/a/13241629/586859

    R.* 引用明确用于访问资源。您尝试做的事情实际上是不可能的,但也许您可以从上面的答案中获得类似以下部分的内容:

    保留一个 XML android:id 以在代码中使用

    如果您的 ViewGroup 无法通过 XML 定义(或者您不希望这样),您可以通过 XML 保留 id 以确保它保持唯一性:

    这里,values/ids.xml 定义了一个自定义的id:

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

    然后一旦创建了 ViewGroup 或 View,您就可以附加自定义 id

    myViewGroup.setId(R.id.reservedNamedId);
    

    【讨论】:

    • 我认为提问者明确不想使用 XML:“如何以编程方式创建 R.id.some_id 而无需在 XML 文件中设置”
    • @RvdK 没错。我明白这一点,但我依靠 OG 海报来阅读我发布的链接,以了解 R.* 明确用于资源。我发布的部分只是对尽可能接近所需解决方案的参考。
    • Mz 点是,如果可以使用 v.setId(int id) 创建 id,则可以在没有 XML 声明的情况下创建 R.*,也许不会,我多次搜索该主题但没有可接受的结果.
    • @user1173536 不,这是不可能的。将您的资源视为硬编码。您不能动态创建它们,它们必须是唯一的。您只能参考和使用它们。
    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多