从Custom View Class中的属性获取ID查看

时间:2016-07-24 11:22:18

标签: android layout

我想从他的ID中获取一个视图,来自xml中的属性。我尝试过getParent(),但它返回null。

XML

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ntwldg="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:background="@drawable/background_settings"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <TextView
            android:id="@+id/revealView"
            android:gravity="center"
            android:text="TEST"
            android:background="@android:color/darker_gray"
            android:visibility="invisible"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    <com.dot.networkloading.NetworkLoading
            android:id="@+id/network_loading"
            ntwldg:text="Youtube"
            ntwldg:image="@drawable/ic_youtube"
            ntwldg:imageBackground="@drawable/ic_youtube"
            ntwldg:revealView="@id/revealView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</RelativeLayout>

attribute revealView引用了上面的View

代码 - NetworkLoading(init())

        title = (TextView) findViewById(R.id.title);
        image = (ImageView) findViewById(R.id.image);
        imageBackground = (ImageView) findViewById(R.id.imageBackground);
        finishView = findViewById(R.id.revealView);

        String text = attributes.getString(R.styleable.network_loading_text);
        imageId = attributes.getResourceId(R.styleable.network_loading_image, 0);
        imageBackgroundId = attributes.getResourceId(R.styleable.network_loading_imageBackground, 0);

        finishView = ((View) getParent()).findViewById(attributes.getResourceId(R.styleable.network_loading_revealView, R.id.revealView));

1 个答案:

答案 0 :(得分:2)

您似乎想要过早地找到Subscriber。在构造函数中,revealView尚未添加到其所在的布局中,因此View将返回getParent()。将null的资源ID保留为字段,在构造函数中获取其值,然后在revealView方法中找到View

在您发布的代码中,删除最后一行 - 最后一行onAttachedToWindow()行 - 而不是将资源ID保存到您的字段中。

finishView = ...

然后在revealViewId = attributes.getResourceId(R.styleable.NetworkLoading_revealView, R.id.revealView); 方法中找到View

onAttachedToWindow()