如何获得适配器类内任何布局或卡片视图的值的宽度? 我有一个用于自定义适配器类的布局文件,在该适配器类中,我现在采用的视图是卡片视图,并给出了作为匹配父对象的宽度,我想要卡片视图的宽度值。 我尝试了多种方法,例如,将后置方法与名片视图或视图树观察器一起使用。
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
}
答案 0 :(得分:0)
您可以通过编程方式获取/设置任何视图的任何布局参数getLayoutParams()
。例如,如果您想要身高,则可以使用iv.getLayoutParams().height
上述ans的参考。 https://developer.android.com/reference/android/widget/LinearLayout.LayoutParams
答案 1 :(得分:0)
原因是您获得空值。
为此,我将提供示例:
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
作为示例,您可以在获得宽度之前看到我的文本 Log
。其背后的原因是我的bindviewholder
正在设置数据以供查看。处理完成后,它将提供我的width
的适当值。
您正在发生相同的问题。正如您评论的那样,您的值在函数外部返回0。这是因为在函数之外,您的onbindviewholder
正在处理中。
您遇到问题的更好方法是
您可以使用 SharedPreferences 将宽度存储在Local中。 为了进行解释,您可以检查this的答案,他提供了正确的方法。
如果有什么我可以帮忙的,只需评论您的问题