Android Tekst na obrazie

97

Mam imageView z obrazem, nad tym obrazem chcę umieścić tekst. Jak mogę to osiągnąć?

AndyAndroid
źródło
1
Prostym sposobem jest pobranie textView i ustawienie jego tła, tak jak robisz to w ImageView. to zrobi twoją pracę łatwo ..
AndroidGeek
wystarczy spojrzeć na poniższy link. Mam nadzieję, że to pomoże ... stackoverflow.com/questions/11100428/…
Ganesh Katikar

Odpowiedzi:

163

Oto jak to zrobiłem i działało dokładnie tak, jak prosiłeś w 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
źródło
Wielkie dzięki za ten przykład. Próbowałem użyć widoku tekstowego complexedDrawable, ale nie mogę ustawić adresu URL obrazu. Ale ważne jest, aby zastosować to obejście w układzie względnym, aby ustawienia layout_align zostały rozpoznane.
AntonSack
wprowadzenie identyfikatora kontroli do wyrównania rozwiązane wiele, dzięki
kal kokah
17

Możesz wziąć, jeśli z innej strony: Wydaje się, że łatwiej jest mieć TextView z rysunkiem w tle:

 <TextView
            android:id="@+id/text"
            android:background="@drawable/rounded_rectangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        </TextView>
martar
źródło
10
Problem z tą odpowiedzią polega na tym, że nie możesz kontrolować atrybutów tła, takich jak imageView. na przykład skalę.
Jesus Dimrix
6

Mógłbyś prawdopodobnie

  • Utwórz nową klasę dziedziczoną z klasy ImageView i
  • nadpisać Method onDraw. Zadzwoń super.onDraw()w tej metodzie pierwszym i
  • następnie narysuj tekst, który chcesz wyświetlić.

jeśli zrobisz to w ten sposób, możesz użyć tego jako pojedynczego komponentu układu, co ułatwia układanie razem z innymi komponentami.

Chris
źródło
5

Jest wiele sposobów. Używasz RelativeLayout lub AbsoluteLayout.

W przypadku wartości względnej możesz na przykład wyrównać obraz z rodzicem po lewej stronie, a także wyrównać tekst do rodzica po lewej stronie ... wtedy możesz użyć marginesów, dopełnienia i grawitacji w widoku tekstu, aby wyrównać go tam, gdzie chcesz nad obrazem.

trgraglia
źródło
1
Trafiłem na tę metodę przez przypadek. Jest to jednak bardzo przydatne, gdy chcesz umieścić tekst na przycisku obrazu lub widoku obrazu. Przykład - umieść aktualną temperaturę na obrazie aktualnych warunków.
Fobos
2

Możesz użyć TextView i zmienić jego tło na obraz, którego chcesz użyć

Eonasdan
źródło
Problem z tą odpowiedzią polega na tym, że nie możesz kontrolować atrybutów tła, takich jak imageView. na przykład skalę.
Jesus Dimrix
2

W tym celu możesz użyć tylko jednego TextView z android:drawableLeft/Right/Top/Bottomdo umieszczenia obrazu w TextView. Ponadto możesz użyć dopełnienia między TextView a rysunkiem zandroid:drawablePadding=""

Użyj tego w ten sposób:

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

Dzięki temu nie potrzebujesz dodatkowego ImageView. Możliwe jest również użycie dwóch drawables na więcej niż jednej stronie TextView.

Jedynym problemem, jaki napotkasz, używając tego, jest to, że rysowalny nie może być skalowany tak, jak ImageView.

Steve Benett
źródło
2

Wypróbuj poniższy kod, który ci pomoże

  <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
źródło
0

Poniższy kod pomoże ci

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
źródło