Bir resim içeren bir imageView var, bu resmin üzerine bir metin yerleştirmek istiyorum. Bunu nasıl başarabilirim?
Bir resim içeren bir imageView var, bu resmin üzerine bir metin yerleştirmek istiyorum. Bunu nasıl başarabilirim?
Yanıtlar:
Ben böyle yaptım ve tam olarak bir RelativeLayout'ta istediğiniz gibi çalıştı:
<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>
Farklı bir yönden şunu almak isteyebilirsiniz: Arka planda bir çekilebilir olan bir TextView'a sahip olmak daha kolay görünüyor:
<TextView
android:id="@+id/text"
android:background="@drawable/rounded_rectangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</TextView>
Muhtemelen yapabilirsin
onDraw
. super.onDraw()
Önce bu yöntemi çağırın vebu şekilde yaparsanız, bunu tek bir Düzen Bileşeni olarak kullanabilirsiniz, bu da diğer bileşenlerle birlikte düzenlemeyi kolaylaştırır.
Bunu başarmak için bir FrameLayout veya bir Merge düzeni kullanmak istiyorsunuz. Android geliştirici kılavuzunda bunun harika bir örneği var: Android Düzen Püf Noktaları # 3: Birleştirerek optimize edin .
Birçok yolu var. RelativeLayout veya AbsoluteLayout kullanıyorsunuz.
Göreli ile, örneğin sol taraftaki ana görüntü ile aynı hizada olmasını sağlayabilir ve ayrıca metnin sol üst tarafla da hizalanmasını sağlayabilirsiniz ... daha sonra metin görünümünde kenar boşluklarını, dolgu ve yerçekimini kullanarak istediğiniz yerde hizalayabilirsiniz. resmin üzerine istiyorum.
Bir TextView kullanabilir ve arka planını kullanmak istediğiniz görüntüyle değiştirebilirsiniz.
Bunun için yalnızca bir TextView kullanabilirsiniz. android:drawableLeft/Right/Top/Bottom
bir Resmi TextView'e konumlandırmak . Ayrıca, TextView ile çekilebilir arasında bazı dolgu kullanabilirsiniz.android:drawablePadding=""
Bunu şu şekilde kullanın:
<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"/>
Bununla fazladan bir ImageView'a ihtiyacınız yok. TextView’un birden fazla tarafında iki çekilebilir öğe kullanmak da mümkündür.
Bunu kullanarak karşılaşacağınız tek sorun, çekilebilir dosyanın ImageView gibi ölçeklenememesidir.
Aşağıdaki kodu deneyin, bu size yardımcı olacaktır
<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>
Aşağıdaki kod size yardımcı olacaktır
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();
}
}
});
}
}```