web-dev-qa-db-fra.com

Android Texte sur l'image

J'ai un imageView avec une image, sur cette image je veux placer un texte. Comment puis-je y arriver?

89
AndyAndroid

Voici comment je l'ai fait et cela a fonctionné exactement comme vous l'aviez demandé dans 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>
157
Alesqui

Vous voudrez peut-être prendre si d'un autre côté: Il semble plus facile d'avoir un TextView avec un dessin sur l'arrière-plan:

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

Vous souhaitez utiliser une disposition FrameLayout ou Merge pour y parvenir. Android Le guide de développement en fournit un bon exemple ici: Astuces de mise en page Android n ° 3: Optimiser par la fusion .

6
Hakan Ozbay

Vous pourriez éventuellement

  • créer une nouvelle classe héritée de la classe ImageView et
  • remplacer la méthode onDraw. Appelez super.onDraw() dans cette méthode en premier et
  • puis dessinez le texte que vous souhaitez afficher.

si vous le faites de cette manière, vous pouvez l'utiliser comme un seul composant de mise en page, ce qui facilite la mise en page avec d'autres composants.

6
Chris

Il y a beaucoup de façons. Vous utilisez RelativeLayout ou AbsoluteLayout.

Avec relative, vous pouvez, par exemple, aligner l'image sur le parent du côté gauche et le texte également sur le parent gauche ... vous pouvez ensuite utiliser les marges, les marges et la gravité sur la vue du texte pour l'aligner à l'endroit où vous le souhaitez. vouloir sur l'image.

5
trgraglia

Essayez le code ci-dessous cela vous aidera

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

Vous pouvez utiliser un TextView et changer son arrière-plan pour l'image que vous souhaitez utiliser

2
user858619

Pour cela, vous ne pouvez utiliser qu'un seul TextView avec Android:drawableLeft/Right/Top/Bottom pour positionner une image sur le TextView. De plus, vous pouvez utiliser du padding entre TextView et le dessinable avec Android:drawablePadding=""

Utilisez-le comme ceci:

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

Avec cela, vous n'avez pas besoin d'un ImageView supplémentaire. Il est également possible d’utiliser deux dessinables de plusieurs côtés de TextView.

Le seul problème que vous rencontrerez en utilisant ceci est que le dessin ne peut pas être redimensionné à la manière d'un ImageView.

2
Steve Benett

Le code ci-dessous cela vous aidera

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


        }
    });
}

}

0
Enli