Testo Android sull'immagine


Risposte:


163

È così che l'ho fatto e ha funzionato esattamente come richiesto all'interno di un 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>

Grazie mille per questo esempio. Ho provato a utilizzare il textview compoundedDrawable ma lì non sono in grado di impostare l'URL di un'immagine. Ma è importante utilizzare questa soluzione alternativa in un layout relativo affinché le impostazioni layout_align vengano riconosciute.
AntonSack

mettere l'id del controllo all'allineamento risolto molto, grazie
kal kokah

16

Potresti prendere se da un lato diverso: sembra più facile avere un TextView con un disegnabile sullo sfondo:

 <TextView
            android:id="@+id/text"
            android:background="@drawable/rounded_rectangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        </TextView>

10
il problema con questa risposta è che non puoi controllare gli attributi di sfondo come imageView. scala per esempio.
Jesus Dimrix,

6

Forse potresti

  • crea una nuova classe ereditata da Class ImageView e
  • sovrascrivere il metodo onDraw. Chiama super.onDraw()prima quel metodo e
  • quindi disegna del testo che desideri visualizzare.

se lo fai in questo modo, puoi usarlo come un singolo componente di layout che rende più facile il layout insieme ad altri componenti.



5

Ci sono molti modi. Si utilizza RelativeLayout o AbsoluteLayout.

Con relativo, puoi allineare l'immagine con il genitore sul lato sinistro, ad esempio, e anche allineare il testo al genitore sinistro ... quindi puoi usare i margini, il padding e la gravità sulla vista del testo per farlo allineare dove tu voglio sopra l'immagine.


1
Mi sono imbattuto in questo metodo per caso. Ma è molto utile quando vuoi mettere del testo su un pulsante immagine o una visualizzazione immagine. Esempio: mettere la temperatura corrente sull'immagine delle condizioni attuali.
Phobos

2

Puoi usare un TextView e cambiare il suo sfondo con l'immagine che vuoi usare


il problema con questa risposta è che non puoi controllare gli attributi di sfondo come imageView. scala per esempio.
Jesus Dimrix,

2

Per questo puoi usare solo un TextView con android:drawableLeft/Right/Top/Bottomper posizionare un'immagine in TextView. Inoltre puoi usare un po 'di riempimento tra TextView e drawable conandroid:drawablePadding=""

Usalo in questo modo:

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

Con questo non hai bisogno di un ImageView aggiuntivo. È anche possibile utilizzare due drawable su più di un lato di TextView.

L'unico problema che dovrai affrontare usando questo, è che il drawable non può essere ridimensionato come un ImageView.


2

Prova il codice seguente questo ti aiuterà `

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

0

Il codice seguente ti aiuterà

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();
                }
            }
        });
    }
}```
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.