如何在RecyclerView中获取CardView的宽度

cap*_*wag 0 android android-layout android-recyclerview

所以这是我的RecyclerView的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/bikename_recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是由RecyclerView的适配器充气的布局.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/bikenames_cardview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical" >

            <ImageView
                android:id="@+id/bikenames_imageview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/bikenames_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    </android.support.v7.widget.CardView>

 </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

所以在这里我需要在我的Activity或RecyclerView适配器中找到CardView(@ id/bikenames_cardview)的宽度.我也写了RecyclerView适配器.

适配器代码

public class BikeNamesAdapter extends RecyclerView.Adapter<BikeNamesViewHolder> {

    BikeNames bikeNames;
    Context context;

    public BikeNamesAdapter(BikeNames bikeNames) {
        this.bikeNames = bikeNames;
    }

    @Override
    public int getItemCount() {
        return bikeNames.getLength();
    }

    @Override
    public BikeNamesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        context = parent.getContext();
        View view = LayoutInflater.from(context).inflate(R.layout.cardview_bike_names, parent, false);
        return new BikeNamesViewHolder(view);
    }

    @Override
    public void onBindViewHolder(BikeNamesViewHolder holder, int position) {
         holder.textViewBikeName.setText(bikeNames.getBikeNameByIndex(position));

    }

}
Run Code Online (Sandbox Code Playgroud)

我可能已经跳过了一些代码,以减少这里的长度.

Ant*_*yov 7

将侦听器设置为您的视图 onCreateViewHolder

ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
  viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      viewWidth = view.getWidth();
      viewHeight = view.getHeight();
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

还要检查这个和这个问题.