android - tablas - numero de elementos de una matriz matlab
Cómo establecer la altura de una fila de elementos en GridLayoutManager (7)
Mi elemento de reciclador que se infla en onCreateViewHolder
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp">
<ImageView
android:id="@+id/gridListImageView"
android:layout_width="96dp"
android:layout_height="96dp"
android:src="@drawable/a" />
<TextView
android:id="@+id/gridListView_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
Quiero mostrar algo como esto. ¿Qué tiene una fila de la mitad de la altura de Recycler View? ¿Y añadir relleno al resto del espacio? ¿Puedo hacer esto por GridLayoutManager?
Y este es mi GridLayoutManager
GridLayoutManager glm = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(glm);
A partir de la biblioteca de soporte 25.1.0, LA RESPUESTA ANTERIOR NO FUNCIONA. Sugiero las siguientes modificaciones:
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
GridLayoutManager.LayoutParams lp = (GridLayoutManager.LayoutParams) v.getLayoutParams();
lp.height = parent.getMeasuredHeight() / 4;
v.setLayoutParams(lp);
return new ViewHolder(v);
}
Al inflar el diseño para sus vistas en el adaptador, puede establecer su altura mediante programación. Para evaluar la altura adecuada para su uso, puede confiar en ViewGroup principal (que es el propio RecyclerView). Aquí es una muestra:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = mLayoutInflater.inflate(R.layout.view_item, parent, false);
// work here if you need to control height of your items
// keep in mind that parent is RecyclerView in this case
int height = parent.getMeasuredHeight() / 4;
itemView.setMinimumHeight(height);
return new ItemViewHolder(itemView);
}
Espero que esto pueda ayudar.
En algún momento, se obtiene el tamaño de la vista de inflado en el adaptador de retorno 0 o negativo. otro enfoque es obtener el tamaño requerido desde fuera del adaptador, manipularlo y configurarlo a la vista. En mi caso, otro problema fue el tamaño establecido sin efecto. así que configuro el tamaño usando el parámetro de diseño
Aquí está configurando mi adaptador en actividad:
Display display = MainActivity.this.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int y = size.y;
y=(int)y/2;
GridLayoutManager linearLayoutManager = new GridLayoutManager(MainActivity.this,2);
recyclerView.setLayoutManager(linearLayoutManager);
NewOrderAdapter newOrderAdapter=new NewOrderAdapter(MainActivity.this,arrayListname,arrayListimage,y);
recyclerView.setAdapter(newOrderAdapter);
y establezco el tamaño de vista como este:
@Override
public myviewholder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = inflator.inflate(R.layout.new_order_row, viewGroup, false);
GridLayoutManager.LayoutParams params = (GridLayoutManager.LayoutParams) view.getLayoutParams();
params.height = ysize;
view.setLayoutParams(params);
myviewholder holder = new myviewholder(view);
return holder;
}
y no olvide establecer una altura para el diseño en su diseño para inicializar
En un nivel de API reciente, actualmente, la altura del reciclador en onCreateViewHolder está siempre vacía. Este fragmento de código sirve para establecer la altura después de invocar onMeasure de la vista del reciclador y establecer la altura correcta en la vista de lista inflada.
@Override
public DataBindingViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
// You may inflate your view here.
parent.post(new Runnable() {
@Override
public void run() {
int height = parent.getMeasuredHeight() / rows;
View view = holder.getBinding().getRoot();
view.getLayoutParams().height = height;
}
});
return holder;
}
Este es mi código para ajustar la altura del elemento de vista de reciclaje en función de la relación de aspecto real requerida.
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.adapter_offers, parent, false);
int width = parent.getMeasuredWidth();
float height = (float) width / Config.ASPECT_RATIO;//(Width/Height)
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) itemView.getLayoutParams();
params.height = Math.round(height);
itemView.setLayoutParams(params);
return new MyViewHolder(itemView);
}
No es necesario establecer la altura de un elemento. El problema aquí es que la imagen trata de llenar todo el espacio. Solo agrega android:adjustViewBounds="true"
a tu ImageView y no agregará espacios en blanco
v.getLayoutParams().width = parent.getMeasuredWidth() / 2;
v.getLayoutParams().height = parent.getMeasuredWidth() / 2;