0

我正在尝试创建一个自定义编辑文本,在用户键入时显示进度图标(如键入....)

我的布局是这样的:

<RelativeLayout android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <android.support.design.widget.TextInputLayout 
        android:id="@+id/search_parent"
        android:visibility="invisible"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <core.controls.DelayedAutoCompleteTextView android:id="@+id/search"
            android:layout_width="match_parent"
            android:gravity="start"
            android:maxLines="1"
            android:lines="1"
            android:singleLine="true"
            android:textColor="#000"
            android:layout_height="match_parent"
            android:imeOptions="actionSearch"
            android:textAppearance="?android:attr/textAppearanceMedium" 
            app:delay="1000"
            app:progress="@+id/progress"/>
    </android.support.design.widget.TextInputLayout>
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:layout_alignParentEnd="true"
        android:id="@+id/progress"/>
</RelativeLayout>

我还在 values 文件夹中声明了这个样式

<declare-styleable name="dact">
    <attr name="delay"
        format="integer" />
    <attr name="progress"
        format="reference" />
</declare-styleable>

并且在视图的构造函数中,我使用以下方法成功检索了进度条的 ID:

 int progress_id = a.getResourceId(Resource.Styleable.dact_progress, 0);

我的问题是,我如何获得对实际进度条的引用,因为它甚至与编辑文本不在同一个视图组中?

提前感谢您提供的任何帮助

4

1 回答 1

1

View#onAttachedToWindow中,当您的视图附加到其父视图时,您可以遍历视图层次结构,试图找到具有给定 ID 的最接近的所需视图,例如

ViewGroup parent = (ViewGroup) getParent();
View target;
while ((target = parent.findViewById(id)) == null) {
    parent = (ViewGroup) parent.getParent();
}

如果没有这样的视图,这段代码会导致异常。

于 2017-05-26T14:10:50.723 回答