2013-06-17 12 views
7

Ich habe einen Code geschrieben, in dem ich Bilder in GridView zeige, aber jetzt möchte ich Text in der Unterseite jedes Bildes zeigen.Wie man Text auf Bild zeigt

Und ich möchte, dass meine Grid wie diese zeigen:

enter image description here

, aber ich mag diese immer [auch Text für Bild zeigen wollen]:

enter image description here

main. 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

, was die Fragen ist hier mit definiert werden? –

+2

erstellen Sie ein benutzerdefiniertes Layout für Ihr GridView-Objekt und fügen Sie dort image + TextView ein und füllen Sie diese in Ihrem Adapter auf. – hardartcore

+0

zustimmen mit @ Android-Entwickler – Chetan

Antwort

7

Sie müssen ein benutzerdefiniertes Rasterelementlayout definieren, das eine Textansicht zum Zuweisen des Texts enthält.

<?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> 

Hier haben wir eine FrameLayout erstellt haben, die das Imageview der Eltern Dimensionen gesetzt hat übereinstimmen, wird dies die Bildansicht, die das Foto zeigt. Als nächstes gibt es eine Textansicht, die verwendet wird, um den Titel des Elements anzuzeigen, und die an den unteren Rand der FrameLayout ausgerichtet ist.

Als nächstes müssen wir Ihren Adapter bearbeiten, um dieses Rasterelementlayout zu verwenden und die richtigen Informationen zu rendern.

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 sollte global in Ihrem Konstruktor

mLayoutInflater = LayoutInflater.from(context); 
+0

Dies wäre die effizienteste Art und Weise zu tun, was Sie wollen , da Sie mit einem benutzerdefinierten Adapter Ansichten recyceln und Ihren Inhalt anpassen können. –