He escrito código para gridview en el que yo pueda mostrar la imagen y el texto, pero quiero mostrar todas las imágenes en una sola desplazable fila como el Pulso aplicaciones de noticias.
He implementado horizontalscroll-view para gridview en xml, pero no funciona en absoluto.
Estoy usando pageviwer para las pestañas y estoy usando fragmentos.

Aquí está mi código xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
   <HorizontalScrollView 
   android:id="@+id/horizontalScrollView1" 
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content"
   android:fillViewport="true"
   android:scrollbars="horizontal" >
<GridView
    android:layout_width="500dp"
    android:layout_height="400dp"
    android:id="@+id/gridview"
    android:columnWidth="300dp"
    android:numColumns="3"
    android:horizontalSpacing="10dp"
    android:scrollbars="horizontal">
</GridView>
 </HorizontalScrollView>
</RelativeLayout>

Aquí está mi imagen adpator código

public class ImageAdapter extends BaseAdapter {
private Context context;
private final String[] mobileValues;
private TextView t;
public ImageAdapter(Context context, String[] mobileValues) {
this.context = context;
this.mobileValues = mobileValues;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convertView == null) {
gridView = new View(context);
//get layout from mobile.xml
gridView = inflater.inflate(R.layout.showlist_item, null);
//set value into textview
TextView textView = (TextView) gridView
.findViewById(R.id.grid_item_label);
textView.setText(mobileValues[position]);
//set image based on selected text
ImageView imageView = (ImageView) gridView
.findViewById(R.id.grid_item_image);
String mobile = mobileValues[position];
if (mobile.equals("Windows")) {
imageView.setImageResource(R.drawable.test_play_image);
} else if (mobile.equals("iOS")) {
imageView.setImageResource(R.drawable.test_play_image);
} else if (mobile.equals("Blackberry")) {
imageView.setImageResource(R.drawable.test_play_image);
} else {
imageView.setImageResource(R.drawable.test_play_image);
}
} else {
gridView = (View) convertView;
}
return gridView;
}
private void clickedButton(TextView tv){
int num = Integer.parseInt(tv.getText().toString());
++num;
tv.setText(Integer.toString(num));
}
private void clickedButtonm(TextView tv){
int num = Integer.parseInt(tv.getText().toString());
if(num>0){
--num;
tv.setText(Integer.toString(num));
}
}
public int getCount() {
return mobileValues.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
class MyOnClickListener implements OnClickListener{
public final TextView tv;
public MyOnClickListener(TextView tv){
this.tv=tv;
}
public void onClick(View v) {
//TODO Auto-generated method stub
clickedButton(tv);
}
}
class MyOnClickListenerm implements OnClickListener{
public final TextView tv;
public MyOnClickListenerm(TextView tv){
this.tv=tv;
}
public void onClick(View v) {
//TODO Auto-generated method stub
clickedButtonm(tv);
}
}

Quiero mostrar como este de desplazamiento a la derecha.
Cómo hacer la cuadrícula de vista desplazable horizontalmente en android

7 Comentarios

  1. 10

    He encontrado De dos vías GridView útil en github.

    Que tiene algunos métodos:

    scrollDirectionPortrait (vertical | horizontal)

    scrollDirectionLandscape (vertical | horizontal)

    numRows()

    etc

    • Se han ejecutado en su aplicación?
    • Sí, !!!!!! Que fue un proyecto divertido!!!! :D. P. S. no Era facebook lo suficientemente bueno!?? 😀
    • Sí, Facebook es una buena plataforma social para comunicarse, pero lo que tiene que ver con el desarrollo ? :-/ 😛
    • mantener el lado seguro eh!!!
    • I m ser profesional 😉 😀
  2. 21

    No es una buena solución en Android a partir de ahora (como Zainodis ha dicho en su comentario ) : HorizontalGridView.

    1. Gradle dependencia

    dependencies {
    compile 'com.android.support:leanback-v17:23.1.0'
    }

    2. Añade que en su diseño

    your_activity.xml

    <!-- your stuff before... -->
    <android.support.v17.leanback.widget.HorizontalGridView
    android:layout_width="wrap_content"
    android:layout_height="80dp"
    android:id="@+id/gridView"
    />
    <!-- your stuff after... -->

    3. Diseño de elemento de cuadrícula

    Crear un diseño de la cuadrícula elemento ( grid_element.xml ). He creado un sencillo con sólo un botón en él.

    <?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">
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button" />
    </LinearLayout>

    4. Crear un adaptador

    Muy inspirados en este enlace : https://gist.github.com/gabrielemariotti/4c189fb1124df4556058

    public class GridElementAdapter extends RecyclerView.Adapter<GridElementAdapter.SimpleViewHolder>{
    private Context context;
    private List<String> elements;
    public GridElementAdapter(Context context){
    this.context = context;
    this.elements = new ArrayList<String>();
    //Fill dummy list
    for(int i = 0; i < 40 ; i++){
    this.elements.add(i, "Position : " + i);
    }
    }
    public static class SimpleViewHolder extends RecyclerView.ViewHolder {
    public final Button button;
    public SimpleViewHolder(View view) {
    super(view);
    button = (Button) view.findViewById(R.id.button);
    }
    }
    @Override
    public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    final View view = LayoutInflater.from(this.context).inflate(R.layout.grid_element, parent, false);
    return new SimpleViewHolder(view);
    }
    @Override
    public void onBindViewHolder(SimpleViewHolder holder, final int position) {
    holder.button.setText(elements.get(position));
    holder.button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    Toast.makeText(context, "Position =" + position, Toast.LENGTH_SHORT).show();
    }
    });
    }
    @Override
    public long getItemId(int position) {
    return position;
    }
    @Override
    public int getItemCount() {
    return this.elements.size();
    }
    }

    5. Se inicializa en su actividad :

    private HorizontalGridView horizontalGridView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity);
    horizontalGridView = (HorizontalGridView) findViewById(R.id.gridView);
    GridElementAdapter adapter = new GridElementAdapter(this);
    horizontalGridView.setAdapter(adapter);
    }
    • De niza. Esto es lo que yo estaba buscando, pero hay un gran error: si se establece horizontalGridView.setNumRows(2); también va a hacer que la red infinitly de desplazamiento en la dirección vertical. Ajuste de la altura de la fila no ayuda.
    • He intentado lo que usted ha dicho. Y estás en lo correcto. No sé si hay una opción que no sé para resolver el problema o si es un error enorme. Esperemos que para mí una fila fue siempre la máxima de que yo necesitaba.
    • Esta solución tiene un problema, después de hacerlo, hay un error que se produce a AndroidManifest.xml y tengo que usar <uses-feature android:name="android.software.leanback" android:required="false"/> para arreglar eso. Estoy usando v17:23.2.1
    • OMG por qué es que el HORIZONTALgridView es el desplazamiento infinitamente verticalmente también. WTF. Pasé como 4 horas en esta mierda de nada
    • Pérdida de tiempo, requiere demasiadas dependencias y obliga a su SDK nivel, además de las fuerzas de appcompat cambios en el tema, alejarse de este
    • ¿este widget proporciona zoom foco en Android TV cuando se navega con el dpad
    • Cargar la última dependencia de la versión para compilar ‘com.android.apoyo:leanback-v17:25.3.1’
    • Buena respuesta, pero no requiere de demasiadas dependencias. Sería perfecto para mí si es compatible BaseAdapter Clase.

  3. 10
            <HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/seatLegendLayout">
    <FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="match_parent">
    <LinearLayout
    android:id="@+id/linearLayout_gridtableLayout"
    android:layout_width="900dp"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <GridView
    android:id="@+id/gridView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="4dp"
    android:columnWidth="100dp"
    android:gravity="center"
    android:numColumns="9"
    android:horizontalSpacing="1dp"
    android:scrollbarAlwaysDrawHorizontalTrack="true"
    android:scrollbarAlwaysDrawVerticalTrack="true"
    android:scrollbars="horizontal"
    android:stretchMode="none"
    android:verticalSpacing="1dp">
    </GridView>
    </LinearLayout>
    </FrameLayout>
    </HorizontalScrollView>
    • esta es la mejor manera de establecer de forma vertical y horizontal scroolview………
    • bonito ans pero esto deja en blanco el espacio en blanco en el extremo en el lado derecho. Alguna solución para esto? @Ashish Soni
    • Usted necesita para asegurarse de que el ancho de @+id/linearLayout_gridtableLayout será igual de numColumns * columnWidth + gridView padding
  4. 2

    Hay una mejor limpiador de la solución de trabajo de lo que he probado sin ningún tipo de extra dependencias acaba de cambiar el layout xml algo similar como el de abajo .

      <HorizontalScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true">
    <android.support.v7.widget.RecyclerView
    android:id="@+id/horizontal_grid_view"
    android:layout_width="wrap_content"
    android:layout_height="112dp"
    android:scrollbarAlwaysDrawVerticalTrack="true"></android.support.v7.widget.RecyclerView>
    </HorizontalScrollView>

    También setSpan recuento basado en su requisito, mientras que la asignación de diseño de Cuadrícula manager.

    • Esto funcionó para mí, pero debe mejorar su respuesta con más código, entonces esto podría ser la mejor respuesta sin usar librerías externas.
  5. 0

    La biblioteca Android-DraggableGridViewPager por Justin(zzhouj)

    Proporciona las siguientes características

    • Vista de cuadrícula de diseño dividido en páginas.
    • Horizontalmente deslizar páginas como ViewPager en apoyo-v4 de la biblioteca.
    • Configuración de col & recuento de filas.
    • Configuración de los oyentes para: cambio de página, elemento
      haga clic en, elemento clic largo, reorganizar.

    Me ayudó a crear un desplazamiento horizontal-capaz de cuadrícula con indicadores de página, espero que ayude a alguien tratando de implementar algo similar.

  6. -3

    Para un pequeño conjunto de datos, una multa de ruta sería utilizar un esquema como el siguiente para el contenedor:

    <HorizontalScrollView
    android_id="@+id/scroll_view"
    android_width="match_parent"
    android_height="wrap_content">
    <LinearLayout
    android_id="@+id/my_list"
    android_width="wrap_content"
    android_height="wrap_content" >
    </LinearLayout>
    </HorizontalScrollView>

    un diseño diferente para los elementos de lista (list_item.xml):

    <FrameLayout
    android_id="@+id/item_container"
    android_width="100dp"
    android_height="100dp">
    <ImageView
    android_id="@+id/item_background"
    android_width="match_parent"
    android_height="match_parent" />
    <TextView
    android_id="@+id/item_title"
    android_width="match_parent"
    android_height="50dp"
    android_background="#80000000"
    android_gravity="center_vertical" />
    </FrameLayout>

    y, a continuación, agregar mediante programación vistas como necesarias:

    public void addItensToLayout(String... mobileValues, LayoutInflater inflater) {
    LinearLayout list = (LinearLayout) findViewById(R.id.my_list);
    for (String item : mobileValues) {
    FrameLayout item = inflater.inflate(R.layout.list_item, list, false);
    TextView textView = (TextView) gridView
    .findViewById(R.id.item_title);
    textView.setText(item);
    ImageView imageView = (ImageView) item
    .findViewById(R.id.item_background);
    String mobile = mobileValues[position];
    if (mobile.equals("Windows")) {
    imageView.setImageResource(R.drawable.test_play_image);
    } else if (mobile.equals("iOS")) {
    imageView.setImageResource(R.drawable.test_play_image);
    } else if (mobile.equals("Blackberry")) {
    imageView.setImageResource(R.drawable.test_play_image);
    } else {
    imageView.setImageResource(R.drawable.test_play_image);
    }
    list.addView(item);
    }
    }

    Al hacerlo, usted ya no está utilizando un adaptador. Si usted realmente necesita para utilizar un adaptador, usted debe utilizar un ViewPager, hay un montón de info para hacerlo en android documentación, o usted puede comenzar a la derecha aquí en StackOverflow:

    El uso de viewpager en mi aplicación
    android viewPager aplicación

    Por favor, pregunte para más info si me he perdido ningún punto de volver allí.

    • Dependiendo del tamaño de los datos, esto puede ser realmente malo. ListViews dará vista de reciclaje en lugar de tener todos los puntos de vista en la memoria al mismo tiempo, con este enfoque se pierde la capacidad y rapidez de ejecución de la memoria y el rendimiento va a ser terrible.

Dejar respuesta

Please enter your comment!
Please enter your name here