Teks Android di atas gambar

96

Saya memiliki imageView dengan gambar, di atas gambar itu saya ingin menempatkan teks. Bagaimana saya bisa mencapai itu?

AndyAndroid
sumber
1
Cara sederhana adalah dengan mengambil textView dan mengaturnya sebagai background seperti yang Anda lakukan di ImageView. itu akan melakukan pekerjaan Anda dengan mudah ..
AndroidGeek
lihat saja tautan di bawah ini. Saya harap ini akan membantu Anda ... stackoverflow.com/questions/11100428/…
Ganesh Katikar

Jawaban:

163

Begitulah cara saya melakukannya dan berfungsi persis seperti yang Anda minta di dalam 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>
Alesqui
sumber
Terima kasih banyak untuk contoh ini. Saya mencoba menggunakan textview compoundedDrawable tetapi di sana saya tidak dapat mengatur url gambar. Tapi penting untuk menggunakan solusi ini dalam layout relatif agar pengaturan layout_align dikenali.
AntonSack
menempatkan id kontrol ke penyelarasan banyak diselesaikan, terima kasih
kal kokah
16

Anda mungkin ingin mengambilnya dari sisi yang berbeda: Tampaknya lebih mudah untuk memiliki TextView dengan drawable di latar belakang:

 <TextView
            android:id="@+id/text"
            android:background="@drawable/rounded_rectangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        </TextView>
martar
sumber
10
Masalah dengan jawaban ini adalah Anda tidak dapat mengontrol atribut latar belakang seperti imageView. skala misalnya.
Jesus Dimrix
6

Anda mungkin bisa

  • membuat kelas baru yang diwarisi dari Kelas ImageView dan
  • mengesampingkan Metode onDraw. Panggil super.onDraw()metode itu terlebih dahulu dan
  • lalu gambar beberapa Teks yang ingin Anda tampilkan.

jika Anda melakukannya dengan cara itu, Anda dapat menggunakan ini sebagai Komponen Tata Letak tunggal yang membuatnya lebih mudah untuk membuat tata letak bersama dengan komponen lainnya.

Chris
sumber
5

Ada banyak cara. Anda menggunakan RelativeLayout atau AbsoluteLayout.

Dengan relative, Anda dapat membuat gambar sejajar dengan induk di sisi kiri misalnya dan juga memiliki teks yang sejajar dengan induk kiri juga ... maka Anda dapat menggunakan margin dan padding dan gravitasi pada tampilan teks untuk membuatnya berjajar di mana Anda ingin di atas gambar.

trgraglia.dll
sumber
1
Saya menemukan metode ini secara tidak sengaja. Tapi ini sangat berguna ketika Anda ingin meletakkan beberapa teks di atas tombol gambar atau tampilan gambar. Contoh - letakkan suhu saat ini di atas gambar kondisi saat ini.
Phobos
2

Anda dapat menggunakan TextView dan mengubah latar belakangnya menjadi gambar yang ingin Anda gunakan

Eonasdan
sumber
Masalah dengan jawaban ini adalah Anda tidak dapat mengontrol atribut latar belakang seperti imageView. skala misalnya.
Jesus Dimrix
2

Untuk ini, Anda hanya dapat menggunakan satu TextView dengan android:drawableLeft/Right/Top/Bottomuntuk memposisikan Gambar ke TextView. Selanjutnya Anda bisa menggunakan beberapa padding antara TextView dan drawable denganandroid:drawablePadding=""

Gunakan seperti ini:

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

Dengan ini, Anda tidak memerlukan ImageView tambahan. Ini juga memungkinkan untuk menggunakan dua drawable di lebih dari satu sisi TextView.

Satu-satunya masalah yang akan Anda hadapi dengan menggunakan ini, adalah drawable tidak dapat diskalakan dengan cara ImageView.

Steve Benett
sumber
2

Coba kode di bawah ini, ini akan membantu Anda`

  <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>
Akhi Prajapati
sumber
0

Kode di bawah ini akan membantu Anda

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();
                }
            }
        });
    }
}```
Enli
sumber