Android Text over image


96

이미지가있는 imageView가 있으며 해당 이미지 위에 텍스트를 배치하고 싶습니다. 어떻게 할 수 있습니까?


1
간단한 방법은 TextView를 가져와 ImageView에서와 같이 배경으로 설정하는 것입니다. 그것은 당신의 일을 쉽게 할 것입니다 ..
AndroidGeek 2014 년

아래 링크를보십시오. 나는 ...이 유 도움이 될 것입니다 희망 stackoverflow.com/questions/11100428/...
가네 Katikar

답변:


163

그것이 내가 한 방법이며 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>

이 예제에 감사드립니다. CompoundedDrawable textview를 사용하려고했지만 거기에 이미지 URL을 설정할 수 없습니다. 그러나 layout_align 설정이 인식되도록 상대 레이아웃에서이 해결 방법을 사용하는 것이 중요합니다.
AntonSack 2013-10-05

컨트롤의 이드를 정렬에 넣어 많이 해결해 주셔서 감사합니다
kal kokah

16

다른 측면에서 가져갈 수 있습니다. 배경에 드로어 블이있는 TextView를 사용하는 것이 더 쉽습니다.

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

10
이 답변의 문제는 imageView와 같은 배경 속성을 제어 할 수 없다는 것입니다. 예를 들어 스케일.
Jesus Dimrix 2013 년

6

당신은 아마도

  • Class ImageView에서 상속 된 새 클래스를 만들고
  • Method를 재정의하십시오 onDraw. super.onDraw()먼저 해당 메서드를 호출 하고
  • 그런 다음 표시하려는 텍스트를 그립니다.

이렇게하면 다른 구성 요소와 함께 더 쉽게 레이아웃 할 수있는 단일 레이아웃 구성 요소로 사용할 수 있습니다.



5

여러 가지 방법이 있습니다. RelativeLayout 또는 AbsoluteLayout을 사용합니다.

상대를 사용하면 이미지를 왼쪽의 부모와 정렬 할 수 있고 텍스트도 부모 왼쪽에 정렬 할 수 있습니다. 그런 다음 텍스트 뷰에서 여백과 패딩 및 중력을 사용하여 줄을 맞출 수 있습니다. 이미지를 원합니다.


1
나는이 방법을 우연히 발견했다. 그러나 이미지 버튼이나 이미지 뷰 위에 텍스트를 추가하고 싶을 때 매우 편리합니다. 예-현재 상태의 이미지 위에 현재 온도를 놓습니다.
Phobos 2011 년

2

TextView를 사용하고 배경을 사용하려는 이미지로 변경할 수 있습니다.


이 답변의 문제는 imageView와 같은 배경 속성을 제어 할 수 없다는 것입니다. 예를 들어 스케일.
Jesus Dimrix 2013 년

2

이를 위해 하나의 TextView 만 사용 android:drawableLeft/Right/Top/Bottom하여 이미지를 TextView에 배치 할 수 있습니다 . 또한 TextView와 드로어 블 사이에 약간의 패딩을 사용할 수 있습니다.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

아래 코드를 시도해보십시오.

  <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

아래 코드가 도움이 될 것입니다.

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();
                }
            }
        });
    }
}```
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.