android按属性查找自定义视图

时间:2014-04-17 18:57:03

标签: android android-custom-view

我正在使用一个托管许多自定义视图的布局。每个自定义视图都有“myname:num”属性,该属性包含唯一数字值。

问题:如何通过“num”属性查找视图?通常我会使用findViewById()方法,但由于“android:id”不能是一个数字,我必须找到另一个解决方案。

布局定义:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myname="http://schemas.android.com/apk/res/com.example"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <com.example.custom.MyView
            myname:num="17"
            myname:type="2" />
        <com.example.custom.MyView
            myname:num="18"
            myname:type="2" />
        <com.example.custom.MyView
            myname:num="19"
            myname:type="2" />
    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

为每个视图指定一个ID,然后在您的活动中,您可以使用

动态调用每个视图
int dynamicId = getResources().getIdentifier("*unique_id*", "id", "*package_name*");
findViewById(dynamicId);

因此,如果您将每个增量标识为view_1view_2,... view_numViews,则可以使用类似循环的内容动态获取它们

for(int i = 1; i <= numViews; i ++){
    int dynamicId = getResources().getIdentifier("view_" + i, "id", "*package_name*");
    MyView view = (MyView) findViewById(dynamicId);
}