2013-06-17 12 views
7

Ho scritto un codice, in cui sto visualizzando le immagini in GridView, ma ora voglio mostrare il testo in fondo a ogni immagine.Come mostrare il testo sull'immagine

e voglio mostrare la mia griglia come questo:

enter image description here

ma ottenendo in questo modo [anche voler mostrare testo per immagine]:

enter image description here

principale. xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:verticalSpacing="0dp" 
     android:horizontalSpacing="0dp" 
     android:stretchMode="columnWidth" 
     android:numColumns="2" 
     /> 
</FrameLayout> 
+0

qual è il domande qui? –

+2

crea un layout personalizzato per l'elemento GridView e metti lì l'immagine + TextView e inseriscili nell'adattatore. – hardartcore

+0

concorda con @ Sviluppatore Android – Chetan

risposta

7

È necessario definire un layout di elemento griglia personalizzato che contenga una vista testuale per assegnare il testo.

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <ImageView 
     android:id="@+id/thumbnail" 
     android:padding="8dp" 
     android:scaleType="cropCenter" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:layout_gravity="bottom" 
     android:textColor="@android:color/white" 
     android:background="#55000000" /> 
</FrameLayout> 

Qui abbiamo creato un FrameLayout che ha l'ImageView impostato per corrispondere alle dimensioni del genitore, questo sarà l'ImageView che visualizza la foto. Successivamente, c'è un TextView che verrà usato per visualizzare il titolo dell'oggetto e che è allineato alla fine del FrameLayout.

Successivamente, è necessario modificare l'adattatore per utilizzare questo layout di elemento della griglia e visualizzare le informazioni corrette.

public View getView(int position, View convertView, ViewGroup parent) { 

    // Inflate the single grid item layout 
    if (convertView == null) { 
     convertView = mLayoutInflater.inflate(R.layout.grid_item, parent, false); 
    } 

    // Set Image 
    ImageView thumbnail = convertView.findViewById(R.id.thumbnail); 
    if (thumbnail != null) { 
     thumbnail.setImageResource(mThumbIds[position]); 
    } 

    // Set Text 
    TextView title = convertView.findViewById(R.id.title); 
    if (title != null) { 
     title.setText("Image Number: " + position); 
    } 

    return convertView;  
} 

mLayoutInflater dovrebbe essere definito a livello globale nel costruttore utilizzando

mLayoutInflater = LayoutInflater.from(context); 
+0

Questo sarebbe il modo più efficiente per fare ciò che vuoi , dal momento che l'utilizzo di un adattatore personalizzato consente di riciclare viste e personalizzare il contenuto. –