Android:以编程方式设置编辑文本或文本视图ID

时间:2014-03-20 08:56:19

标签: android android-layout android-edittext

我正在开发一个应用程序,我在其中以编程方式创建Edittext:

EditText edText = new EditText(this);
edText.setId(1);
edText .setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,0f));
edText .setInputType(InputType.TYPE_CLASS_NUMBER);
edText.setHint("dsgsdgsgs");
tableLayout.addView(edText);

这里我将编辑文本的ID设置为" 1"整数行edText.setId(1);

但我需要的是 - 我想在字符中设置ID,例如:

edText.setId("edittext_hello");

这样我就可以通过该ID访问它了。如何帮助我完成这项任务。

6 个答案:

答案 0 :(得分:20)

正如其他人所说,你不能这样做。为什么你想要/你的要求是什么?

您可以在xml文件中创建 id 并使用它 - 如果您希望它是描述性的。这也是比使用文字int更好的方法,因为您可能会在布局层次结构中与其他视图发生 id 冲突(不太可能,但可能)。这对我来说似乎是解决问题的最佳/最干净的解决方案。

请参阅http://developer.android.com/guide/topics/resources/more-resources.html#Id

e.g。在res/values/id.xml

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

然后用

设置
edText.setId(R.id.edittext_hello);

答案 1 :(得分:17)

您不能将id设置为String。您只能将整数指定为Id。但是如果你想使用String作为id以便于使用那么 - 在 res / values / ids.xml 文件

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

    <item name="edit_text_hello" type="id"/>

</resources>

然后将其用作:

edText.setId(R.id.edit_text_hello);

所以你可以做你需要的。

答案 2 :(得分:4)

不,您不能将id设置为字符串。您只能将integer指定为ID。您可以将setTag() View与String一起使用。但对于id,它只会整数。由于android资源在R.java文件中维护为整数类型。

<强>更新

为什么不将String或其他数据类型(没有整数)id设置为任何Android资源?

<强>因为:

Android资源ID是32位整数。它包括

an 8-bit Package id [bits 24-31]
an 8-bit Type id [bits 16-23]
a 16-bit Entry index [bits 0-15]

包ID 标识包含资源的包块。

类型ID 标识资源的类型,因此标识相应的Typespec块和 键入包含其值或值的块或块

条目索引标识Typespec块和类型块中的各个资源。

答案 3 :(得分:3)

您无法使用idcharString以外的任何其他内容设置int ...因为id由{维护} R.java {1}}仅包含int

的文件

您可以使用setTag()代替setId()

使用setTag()如下...

edText.setTag("edittext_hello");

答案 4 :(得分:0)

您也可以在不创建任何额外资源(如ids.xml)且不将任何id设置为动态创建的任何EditText的情况下实现您的问题。

只需要设置标签元素的父引用,然后就可以使用标记找到它。

<强>父

LinearLayout linearLayout= (LinearLayout) findViewById(R.id.layout_id);

然后

<强>童车

EditText editText = (EditText) linearLayout.findViewWithTag("yourStringTag");

例如..

注意:显然,如果你动态创建了EditTexts,你可以这样做:

for (Map.Entry<String, String> entry : yourHashMap.entrySet()) {

LinearLayout linearLayout= (LinearLayout) findViewById(R.id.parent_layout_id);

EditText editText = (EditText) linearLayout.findViewWithTag(entry.getKey());

// Then do whatever you want with your editText referenced.
// ...

}

答案 5 :(得分:-3)

您可以使用setText()而不是setId()。

edText_view.setText(“你的文字”);