Mam imageView z obrazem, nad tym obrazem chcę umieścić tekst. Jak mogę to osiągnąć?
android
android-imageview
android-image
AndyAndroid
źródło
źródło
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>
źródło
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>
źródło
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.
źródło
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 .
źródło
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.
źródło
Możesz użyć TextView i zmienić jego tło na obraz, którego chcesz użyć
źródło
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.
źródło
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>
źródło
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(); } } }); } }```
źródło