Android текст поверх изображения - PullRequest
89 голосов
/ 09 марта 2011

У меня есть imageView с изображением, поверх этого изображения я хочу разместить текст. Как мне этого добиться?

Ответы [ 9 ]

157 голосов
/ 25 ноября 2011

Вот как я это сделал, и он работал точно так, как вы просили в RelativeLayout:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativelayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/myImageSouce" />

    <TextView
        android:id="@+id/myImageViewText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/myImageView"
        android:layout_alignTop="@id/myImageView"
        android:layout_alignRight="@id/myImageView"
        android:layout_alignBottom="@id/myImageView"
        android:layout_margin="1dp"
        android:gravity="center"
        android:text="Hello"
        android:textColor="#000000" />

</RelativeLayout>
14 голосов
/ 26 октября 2012

Вы можете взять, если с другой стороны: кажется, проще иметь TextView с рисунком на фоне:

 <TextView
            android:id="@+id/text"
            android:background="@drawable/rounded_rectangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        </TextView>
6 голосов
/ 09 марта 2011

Вы могли бы

  • создать новый класс, унаследованный от Class ImageView, и
  • переопределить метод onDraw.Сначала вызовите super.onDraw() в этом методе и
  • , а затем нарисуйте некоторый текст, который вы хотите отобразить.

если вы сделаете это таким образом, вы можете использовать его как один компонент Layout, которыйоблегчает компоновку вместе с другими компонентами.

6 голосов
/ 09 марта 2011

Вы хотите использовать FrameLayout или макет слияния для достижения этой цели. Вот пример этого руководства по Android: Уловки Android Layout # 3: Оптимизация путем объединения .

5 голосов
/ 09 марта 2011

Есть много способов. Вы используете RelativeLayout или AbsoluteLayout.

С относительным, вы можете выровнять изображение с родителем, например, с левой стороны, а также выровнять текст с родителем слева тоже ... тогда вы можете использовать поля, отступы и гравитацию в текстовом представлении, чтобы получить его подкладка, где вы хотите над изображением.

2 голосов
/ 02 января 2016

Попробуйте приведенный ниже код, это вам поможет`

  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="150dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/gallery1"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#7ad7d7d7"
        android:gravity="center"
        android:text="Juneja Art Gallery"
        android:textColor="#000000"
        android:textSize="15sp"/>
</RelativeLayout>
2 голосов
/ 05 сентября 2013

Для этого вы можете использовать только один TextView с android:drawableLeft/Right/Top/Bottom для позиционирования изображения в TextView. Кроме того, вы можете использовать некоторые отступы между TextView и drawable с помощью android:drawablePadding=""

Используйте это так:

<TextView
    android:id="@+id/textAndImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:drawableBottom="@drawable/yourDrawable"
    android:drawablePadding="10dp" 
    android:text="Look at the drawable below"/>

При этом вам не нужен дополнительный ImageView. Также возможно использование двух объектов рисования на нескольких сторонах TextView.

Единственная проблема, с которой вы столкнетесь при использовании этого метода, заключается в том, что масштабируемое изображение не может быть масштабировано как ImageView.

2 голосов
/ 31 октября 2011

Вы можете использовать TextView и изменить его фон на изображение, которое вы хотите использовать

0 голосов
/ 14 июля 2016

приведенный ниже код вам поможет

public class TextProperty {
private int heigt;                              //读入文本的行数
private String []context = new String[1024];    //存储读入的文本

/*
 *@parameter wordNum
 *
 */
public TextProperty(int wordNum ,InputStreamReader in) throws Exception {
    int i=0;
    BufferedReader br = new BufferedReader(in);
    String s;
    while((s=br.readLine())!=null){
        if(s.length()>wordNum){
            int k=0;
            while(k+wordNum<=s.length()){
                context[i++] = s.substring(k, k+wordNum);
                k=k+wordNum;
            }
            context[i++] = s.substring(k,s.length());
        }
        else{
            context[i++]=s;
        }
    }
    this.heigt = i;
    in.close();
    br.close();
}


public int getHeigt() {
    return heigt;
}

public String[] getContext() {

    return context;
}

}

public class MainActivity extends AppCompatActivity {

private Button btn;
private ImageView iv;
private final int WORDNUM = 35;  //转化成图片时  每行显示的字数
private final int WIDTH = 450;   //设置图片的宽度
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    iv = (ImageView) findViewById(R.id.imageView);
    btn = (Button) findViewById(R.id.button);

    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            int x=5,y=10;
            try {
                TextProperty tp = new TextProperty(WORDNUM, new InputStreamReader(getResources().getAssets().open("1.txt")));
                Bitmap bitmap = Bitmap.createBitmap(WIDTH, 20*tp.getHeigt(), Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                Paint paint = new Paint();
                paint.setColor(Color.WHITE);
                paint.setTextAlign(Paint.Align.LEFT);
                paint.setTextSize(20f);

                String [] ss = tp.getContext();
                for(int i=0;i<tp.getHeigt();i++){
                    canvas.drawText(ss[i], x, y, paint);
                    y=y+20;
                }

                canvas.save(Canvas.ALL_SAVE_FLAG);
                canvas.restore();
                String path = Environment.getExternalStorageDirectory() + "/image.png";
                System.out.println(path);
                FileOutputStream os = new FileOutputStream(new File(path));
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
                //Display the image on ImageView.
                iv.setImageBitmap(bitmap);
                iv.setBackgroundColor(Color.BLUE);
                os.flush();
                os.close();
            }
            catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }
    });
}

}

...