J'ai une imageView avec une image, sur cette image je veux placer un texte. Comment puis-je y parvenir?
J'ai une imageView avec une image, sur cette image je veux placer un texte. Comment puis-je y parvenir?
Réponses:
C'est ainsi que je l'ai fait et cela a fonctionné exactement comme vous l'avez demandé dans 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>
Vous voudrez peut-être prendre si d'un côté différent: Il semble plus facile d'avoir un TextView avec un dessinable en arrière-plan:
<TextView
android:id="@+id/text"
android:background="@drawable/rounded_rectangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</TextView>
Vous pourriez peut-être
onDraw
. Appelez super.onDraw()
d'abord cette méthode etsi vous procédez ainsi, vous pouvez l'utiliser comme un seul composant de mise en page, ce qui facilite la mise en page avec d'autres composants.
Vous souhaitez utiliser un FrameLayout ou une mise en page Merge pour y parvenir. Le guide de développement Android en a un excellent exemple ici: Astuces de mise en page Android n ° 3: Optimiser en fusionnant .
Il existe de nombreuses manières. Vous utilisez RelativeLayout ou AbsoluteLayout.
Avec relative, vous pouvez aligner l'image avec le parent sur le côté gauche par exemple et également aligner le texte sur le parent à gauche ... alors vous pouvez utiliser les marges, le remplissage et la gravité sur la vue du texte pour l'aligner là où vous veulent sur l'image.
Vous pouvez utiliser un TextView et changer son arrière-plan en l'image que vous souhaitez utiliser
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 un peu de remplissage entre le TextView et le dessinable avecandroid: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 sur plus d'un côté de TextView.
Le seul problème que vous rencontrerez en utilisant ceci, est que le dessinable ne peut pas être mis à l'échelle à la manière d'un ImageView.
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>
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();
}
}
});
}
}```