Java 如果在Android的xml文件中定义为match parent,如何在任何适配器类的值中获取视图的实际宽度
如何获取适配器类中任何布局或卡视图的宽度值? 我有一个用于自定义适配器类的布局文件,其中我采用了一个视图,该视图是card view,并且给定了宽度作为匹配父级,现在在适配器类中,我希望card view width的值为。 我尝试了多种方法,例如,将post方法与卡片视图或视图树观察者结合使用Java 如果在Android的xml文件中定义为match parent,如何在任何适配器类的值中获取视图的实际宽度,java,android,layout,width,layoutparams,Java,Android,Layout,Width,Layoutparams,如何获取适配器类中任何布局或卡视图的宽度值? 我有一个用于自定义适配器类的布局文件,其中我采用了一个视图,该视图是card view,并且给定了宽度作为匹配父级,现在在适配器类中,我希望card view width的值为。 我尝试了多种方法,例如,将post方法与卡片视图或视图树观察者结合使用 CardView mCardView; int width=0; int rootWidth,rootHeight; mCardView = itemview.findViewById(R.id.mCa
CardView mCardView;
int width=0;
int rootWidth,rootHeight;
mCardView = itemview.findViewById(R.id.mCardView);
// Method in Recyclerview Adapter Class
public void onBindHolder(final ViewHolder holder, final int position)
{
// using viewtreeobserver to get width of view
ViewTreeObserver vto = mCardView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new
ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout() {
rootHeight = mCardView.getHeight();
rootWidth = mCardView.getWidth();
}
});
}
//Another method tried to get the width of the view
mCardView.post(new Runnable() {
@Override
public void run() {
rootHeight = mCardView.getHeight();
rootWidth = mCardView.getWidth();
}
});
width = rootWidth; //always return 0 in both th cases
}
您可以通过编程方式获取/设置任何视图的任何布局参数
getLayoutParams()
方法。例如,如果需要高度,则可以使用iv.getLayoutParams().height
上述ans的参考。您可以通过编程方式获取/设置任何视图的任何布局参数
getLayoutParams()
方法。例如,如果需要高度,则可以使用iv.getLayoutParams().height
上述ans的引用。获取空值的原因 为此,我将提供以下示例:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.card?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{
override fun onGlobalLayout() {
holder.card?.getViewTreeObserver()?.removeGlobalOnLayoutListener(this);
Log.e("widths", holder.card?.measuredWidth.toString())
}
})
Log.e("text","i am here")
}
此代码的输出为:
E/text: i am here
E/text: i am here
E/widths: 1080
E/widths: 1080
根据示例,您可以看到我的文本日志
在获得宽度之前运行。原因是mybindviewholder
正在设置要查看的数据。过程完成后,它将提供my宽度的正确值
同样的问题也发生在你身上。正如您所评论的,您的值在函数外部返回0。这是因为您的onbindviewholder
正在处理中
解决问题的更好方法是
您可以使用SharedReferences在本地存储宽度。
为了解释,你们可以检查他提供的正确方法的答案
如果有什么我可以帮忙的,请评论您的问题您得到空值的原因
为此,我将提供以下示例:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.card?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{
override fun onGlobalLayout() {
holder.card?.getViewTreeObserver()?.removeGlobalOnLayoutListener(this);
Log.e("widths", holder.card?.measuredWidth.toString())
}
})
Log.e("text","i am here")
}
此代码的输出为:
E/text: i am here
E/text: i am here
E/widths: 1080
E/widths: 1080
根据示例,您可以看到我的文本日志
在获得宽度之前运行。原因是mybindviewholder
正在设置要查看的数据。过程完成后,它将提供my宽度的正确值
同样的问题也发生在你身上。正如您所评论的,您的值在函数外部返回0。这是因为您的onbindviewholder
正在处理中
解决问题的更好方法是
您可以使用SharedReferences在本地存储宽度。
为了解释,你们可以检查他提供的正确方法的答案
如果有什么我可以帮忙的话,请评论您的问题通过获取匹配的父宽度,您想要实现什么?我只想要它的实际宽度值,以便在我的代码中进一步转换。先生,这不是正确的方式,因为它提供了错误的详细信息。通过获取匹配的父宽度,您想要实现什么?我只想要它的实际宽度值,以便在我的代码中进一步转换。先生,这不是正确的方式,因为它给出了错误的细节