web-dev-qa-db-fra.com

Placer une vue de texte au-dessus de imageview dans Android

  • J'ai une listview, qui a une seule imageview qui fait défiler.
  • J'essaie de placer une textview sur Imageview
  • Les deux vues doivent être visibles

  1. C'est possible ?
  2. Si oui, comment le faire par programme?
  3. Quels changements devrais-je avoir à faire?

list_view_item_for_images.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <ImageView
        Android:id="@+id/flag"
        Android:layout_width="fill_parent"
        Android:layout_height="250dp"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentRight="true"
        Android:scaleType="fitXY"
        Android:src="@drawable/ic_launcher" />

</RelativeLayout>

Il donne une sortie comme ci-dessous

enter image description here

Comment faire quelque chose comme ci-dessous

enter image description here

note :: Dish 1 & 2 sont des textviews

46
user2609157

Cela devrait vous donner la mise en page requise:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <ImageView
        Android:id="@+id/flag"
        Android:layout_width="fill_parent"
        Android:layout_height="250dp"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentRight="true"
        Android:scaleType="fitXY"
        Android:src="@drawable/ic_launcher" />

    <TextView
        Android:id="@+id/textview"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_marginTop="20dp"
        Android:layout_centerHorizontal="true" />

</RelativeLayout>

Jouez avec le Android:layout_marginTop="20dp" pour voir celui qui vous convient le mieux. Utilisez l'ID textview pour définir de manière dynamique la valeur Android:text.

Etant donné que RelativeLayout empile ses enfants, définir TextView après qu'ImageView le place "sur" ImageView.

REMARQUE: Des résultats similaires peuvent être obtenus en utilisant une variable FrameLayout comme parent, ainsi qu'un gain d'efficacité par rapport à l'utilisation de tout autre conteneur Android. Merci à Igor Ganapolsky (voir commentaire ci-dessous) pour avoir signalé que cette réponse nécessite une mise à jour.

81
Vikram

Essaye ça:

<RelativeLayout 
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/rel_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >

<ImageView
    Android:id="@+id/ImageView"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src=//source of image />

<TextView
    Android:id="@+id/ImageViewText"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignLeft="@id/ImageView"
    Android:layout_alignTop="@id/ImageView"
    Android:layout_alignRight="@id/ImageView"
    Android:layout_alignBottom="@id/ImageView"
    Android:text=//u r text here
    Android:gravity="center"
    />

J'espère que cela pourrait vous aider.

8
nitesh

vous pouvez utiliser framelayout pour y parvenir.

comment utiliser framelayout

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:layout_width="fill_parent"
   Android:layout_height="fill_parent">

   <ImageView 
   Android:src="@drawable/ic_launcher"
   Android:scaleType="fitCenter"
   Android:layout_height="250px"
   Android:layout_width="250px"/>

   <TextView
   Android:text="Frame Demo"
   Android:textSize="30px"
   Android:textStyle="bold"
   Android:layout_height="fill_parent"
   Android:layout_width="fill_parent"
   Android:gravity="center"/>
</FrameLayout>

ref: tutorialspoint

7
Ker p pag

vous pouvez essayer cela aussi. J'utilise juste framelayout.

 <FrameLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:background="@drawable/cover"
                Android:gravity="bottom">

                <TextView
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:textAppearance="?android:attr/textAppearanceMedium"
                    Android:text="Hello !"
                    Android:id="@+id/welcomeTV"
                    Android:textColor="@color/textColor"
                    Android:layout_gravity="left|bottom" />
            </FrameLayout>
0
spaceMonkey

glissez et déposez le TextView sur ImageView dans Eclipse

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
    Android:id="@+id/imageView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentTop="true"
    Android:layout_marginLeft="48dp"
    Android:layout_marginTop="114dp"
    Android:src="@drawable/bluehills" />

<TextView
    Android:id="@+id/textView1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignLeft="@+id/imageView1"
    Android:layout_centerVertical="true"
    Android:layout_marginLeft="85dp"
    Android:text="TextView" />

</RelativeLayout>

Et cela la sortie du XML ci-dessusenter image description here

0
Shakeeb Ayaz

Comme vous l'avez mentionné dans OP, vous devez superposer Text sur ImageView de manière programmée. Vous pouvez obtenir ImageView et écrire dessus avec l’aide de le mettre sur Canvas et Paint.

 private BitmapDrawable writeTextOnDrawable(int drawableId, String text) 
 {
 Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true);
 Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
 Paint paint = new Paint();
 Paint.setStyle(Style.FILL);
 Paint.setColor(Color.WHITE);
 Paint.setTypeface(tf);
 Paint.setTextAlign(Align.CENTER);
 Paint.setTextSize(11);
 Rect textRect = new Rect();
 Paint.getTextBounds(text, 0, text.length(), textRect);
 Canvas canvas = new Canvas(bm);
 canvas.drawText(text, xPos, yPos, Paint);
 return new BitmapDrawable(getResources(), bm);
 }
0
Vikalp Patel