2014-11-17 4 views
3

Я хочу отобразить текст над изображением. Я делаю это как Alesqui предложил здесь: Android Text over imageПоказать TextView над ImageView в android

Предварительный просмотр в Android студии выглядит отлично: android Studio preview of the xml

Но мой фактический результат выглядит следующим образом с текстом unwantedly выше:

Code in Emulator

Я должен добавить динамический динамический файл LinearLayout во время выполнения:

<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> 

добавить его следующим образом:

LinearLayout ll = (LinearLayout) findViewById(R.id.layout_story_covers); 
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    for (int i = 0; i < stories.size(); i++) 
    { 
     // add imageView 
     RelativeLayout coverLayout = (RelativeLayout) inflater.inflate(R.layout.fragment_cover, null); 
     ImageView imageView =(ImageView) coverLayout.findViewById(R.id.imageViewCover); 
     TextView textView = (TextView) coverLayout.findViewById(R.id.textViewCover); 
     textView.setText(stories.get(i).title); 
     imageLoader.displayImage(stories.get(i).cover.fileUrl, imageView); 
     ll.addView(coverLayout); 
    } 

Это должно иметь что-то делать с этим родительским LinearLayout. Каков правильный способ получить результат?

+0

TextColor неправильно. он должен быть черным, а не желтым. И он должен сказать «Привет», а не «Мой текст». – njzk2

+0

Да, это непоследовательно. Но я пренебрег этим из-за его меньшей значимости. – dba

ответ

3

Попробуйте вместо этого:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relativelayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_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_centerInParent="true" 
     android:layout_margin="1dp" 
     android:gravity="center" 
     android:text="Hello" 
     android:textColor="#000000" /> 

</RelativeLayout> 
+0

Вот и все! Благодаря! – dba

+0

Есть много вещей, которые этот ответ не дает, и вы должны прекратить делать. У меня был ответ, пытаясь указать на них. Он не должен был быть выбран как правильный. Если у кого-то есть больше улучшений для моего ответа, прокомментируйте это. – jpardogo

+0

Я также предпочел бы FrameLayout здесь, но я не знаю полного контекста его приложения, и может быть, он хочет делать другие вещи, которые требуют RelativeLayout (возможно, он добавит больше просмотров?), Поэтому я намеренно предложил только изменение, которое решает его непосредственную проблему. – Karakuri

1

Советы:

  • Romain guy сказал: «Я не говорил, не используйте RelativeLayout, вы просто должны знать его (возможно) воздействие на производительность, если используется в верхней части дерева. " Гораздо лучше использовать простой FrameLayout, если сможете.

  • Будьте в курсе scaleType собственности в ImageView-х

  • Если вы хотите ImageView быть такого же размера, как родитель, то вам необходимо установить его в качестве высоты match_parent и ширины. Если вы используете обертку, она будет зависеть от размера растрового изображения и разрешения.

  • Рассмотрите возможность использования match_parent вместо deprecated fill_parent

  • Я предпочел бы Picasso для управления растровых изображений.

-

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/myImageView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/myImageSouce" 
     android:scaleType="centerCrop"/> 

    <TextView 
     android:id="@+id/myImageViewText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="@dimen/spacing_medium" 
     android:layout_gravity="center" 
     tools:text="Test"/> 
</FrameLayout> 
+0

на основе этого https://www.infinum.co/the-capsized-eight/articles/top-5-android-libraries-every-android-developer-should-know- about Я выбрал UIL. [Также интересно] (http: // stackoverflow.com/questions/19995007/local-image-caching-solution-for-android-square-picasso-vs-universal-image-load) – dba

+0

Ну, я должен изменить свой ответ и сказать, что Пикассо - это только мое личное предпочтение. – jpardogo

Смежные вопросы