gpt4 book ai didi

android - 将xml中相邻 View 的id传递给自定义 View 并在自定义 View 的构造函数中检索它

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:11 25 4
gpt4 key购买 nike

下面是我的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp" xmlns:app="http://schemas.android.com/apk/res/com.infibeam.allthingsd.apps.spinr">

<com.asyncimagewidget.AsyncImageView
android:id="@+id/discover_list_icon"
android:layout_width="130dp"
android:layout_height="130dp"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
app:progressId="@+id/asyncLoadingProgress"
/>
<ProgressBar
android:id="@+id/asyncLoadingProgress"
android:layout_width="130dp"
android:layout_height="130dp"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>

可以看到

app:progressId="@+id/asyncLoadingProgress"

这是我在 attrs.xml 中定义的自定义属性,如下所示。

<resources>
<declare-styleable name="AsyncImageView">
<attr name="defaultSrc" format="reference" />
<attr name="parentId" format="reference" />
<attr name="progressId" format="reference" />
<attr name="url" format="string" />
<attr name="inDensity">
<enum name="ldpi" value="120" />
<enum name="mdpi" value="160" />
<enum name="hdpi" value="240" />
<enum name="xhdpi" value="320" />
</attr>
</declare-styleable>
</resources>

现在我的问题是我想在 AsyncImageView 的构造函数中获取 Progressbar 的资源标识符,如下所示。

public AsyncImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

initializeDefaultValues();

TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.AsyncImageView, defStyle, 0);

Drawable d = a.getDrawable(R.styleable.AsyncImageView_defaultSrc);
if (d != null) {
setDefaultImageDrawable(d);
}

final int inDensity = a
.getInt(R.styleable.AsyncImageView_inDensity, -1);
if (inDensity != -1) {
setInDensity(inDensity);
}

setUrl(a.getString(R.styleable.AsyncImageView_url));

a.recycle();

}

最佳答案

Now My question is I want to obtain the resource identifier of Progressbar in constructor of AsyncImageView which is as follows.

如果我没记错的话你可以使用 getResourceId()构造函数中的方法:

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AsyncImageView, defStyle, 0);
int progressId = a.getResourceId(R.styleable.AsyncImageView_progressId, 0);

此外,如果您在 AsyncImageView 属性中声明了 ProgressBar 的 id,那么我认为您需要像这样为 ProgressBar:

android:id="@id/asyncLoadingProgress"

关于android - 将xml中相邻 View 的id传递给自定义 View 并在自定义 View 的构造函数中检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13778690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com