Mam imageView z obrazem, nad tym obrazem chcę umieścić tekst. Jak mogę to osiągnąć?
Mam imageView z obrazem, nad tym obrazem chcę umieścić tekst. Jak mogę to osiągnąć?
Odpowiedzi:
Oto jak to zrobiłem i działało dokładnie tak, jak prosiłeś w 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>
Możesz wziąć, jeśli z innej strony: Wydaje się, że łatwiej jest mieć TextView z rysunkiem w tle:
<TextView
android:id="@+id/text"
android:background="@drawable/rounded_rectangle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
</TextView>
Mógłbyś prawdopodobnie
onDraw
. Zadzwoń super.onDraw()
w tej metodzie pierwszym ijeśli zrobisz to w ten sposób, możesz użyć tego jako pojedynczego komponentu układu, co ułatwia układanie razem z innymi komponentami.
Aby to osiągnąć, chcesz użyć układu FrameLayout lub Merge. Przewodnik dla programistów Androida ma tutaj świetny przykład: Sztuczki dotyczące układu Androida # 3: Optymalizuj przez scalenie .
Jest wiele sposobów. Używasz RelativeLayout lub AbsoluteLayout.
W przypadku wartości względnej możesz na przykład wyrównać obraz z rodzicem po lewej stronie, a także wyrównać tekst do rodzica po lewej stronie ... wtedy możesz użyć marginesów, dopełnienia i grawitacji w widoku tekstu, aby wyrównać go tam, gdzie chcesz nad obrazem.
Możesz użyć TextView i zmienić jego tło na obraz, którego chcesz użyć
W tym celu możesz użyć tylko jednego TextView z android:drawableLeft/Right/Top/Bottom
do umieszczenia obrazu w TextView. Ponadto możesz użyć dopełnienia między TextView a rysunkiem zandroid:drawablePadding=""
Użyj tego w ten sposób:
<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"/>
Dzięki temu nie potrzebujesz dodatkowego ImageView. Możliwe jest również użycie dwóch drawables na więcej niż jednej stronie TextView.
Jedynym problemem, jaki napotkasz, używając tego, jest to, że rysowalny nie może być skalowany tak, jak ImageView.
Wypróbuj poniższy kod, który ci pomoże
<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>
Poniższy kod pomoże ci
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();
}
}
});
}
}```