it-roy-ru.com

Размещение textview поверх изображения в Android

  • У меня есть listview, который имеет один imageview, который Прокручивается по вертикали
  • Я пытаюсь поместить textview поверх Imageview
  • Оба вида должны быть видны

  1. Является ли это возможным ?
  2. Если да, как это сделать программно?
  3. Какие изменения мне нужно сделать?

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>

Это дает вывод, как показано ниже

enter image description here

Как сделать что-то вроде ниже

enter image description here

примечание :: Блюдо 1 и 2 являются текстовыми представлениями

46
user2609157

Это должно дать вам необходимый макет:

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

Поиграйте с Android:layout_marginTop="20dp", чтобы увидеть, какой из них вам больше подходит. Используйте идентификатор textview для динамической установки значения Android:text.

Поскольку RelativeLayout складывает свои дочерние элементы, определение TextView после ImageView помещает его «поверх» ImageView.

ПРИМЕЧАНИЕ: Аналогичные результаты могут быть получены с использованием FrameLayout в качестве родительского объекта наряду с повышением эффективности по сравнению с использованием любого другого контейнера Android. Спасибо Igor Ganapolsky (см. Комментарий ниже) за указание, что этот ответ нуждается в обновлении.

81
Vikram

Попробуй это:

<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"
    />

Надеюсь, это поможет вам.

8
nitesh

вы можете использовать framelayout для достижения этой цели.

как использовать 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

вы можете попробовать это тоже. Я использую только 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

просто перетащите TextView поверх ImageView в 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>

И это вывод вышеупомянутого xmlenter image description here

0
Shakeeb Ayaz

Как вы упомянули в OP, вам нужно программно наложить Text на ImageView. Вы можете получить ImageView drawable и написать на нем с помощью размещения его на Canvas и 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