Наложение текста поверх изображения в программе Framelayout программно - Android - PullRequest
4 голосов
/ 10 октября 2011

Я пытаюсь реализовать просмотр текста поверх изображения в макете кадра в центре и внизу макета, как показано здесь:

http://developer.android.com/resources/articles/layout-tricks-merge.html

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

<ImageView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 

    android:scaleType="center"
    android:src="@drawable/golden_gate" />

<TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"

    android:padding="12dip"

    android:background="#AA000000"
    android:textColor="#ffffffff"

    android:text="Golden Gate" />

</FrameLayout>

Я пытаюсь реализовать это программно, но безуспешно .. Я всегда получаю текстовое представление в левом верхнем углу .. кто-нибудь может помочь? Вот мой код:

FrameLayout frameLay = new FrameLayout(MainScreen.this);                            
LayoutParams layoutParamsFrame = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

frameLay.setLayoutParams(layoutParamsFrame);

LinearLayout.LayoutParams layoutParamsImage= new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

ImageView imageView= new ImageView(MainScreen.this);
imageView.setImageResource(R.drawable.movie);   
imageView.setLayoutParams(layoutParamsImage);

TextView theText=new TextView(MainScreen.this);
theText.setText("GOLDEN Gate");
theText.setTextColor(Color.WHITE);                           
theText.setTypeface(Typeface.DEFAULT_BOLD); 

LayoutParams layoutParamsText= new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

theText.setLayoutParams(layoutParamsText);

theText.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);

frameLay.addView(theText);
frameLay.addView(imageView);

Ответы [ 2 ]

7 голосов
/ 10 октября 2011

Все, что вам нужно сделать, это создать текстовое представление, чтобы заполнить родительский элемент, как

LayoutParams layoutParamsText= new LayoutParams(LayoutParams.FILL__PARENT, 
        LayoutParams.FILL_PARENT); 

Когда вы устанавливаете гравитацию для текстового представления, это означает, что вы сообщаете текстовому представлению, где расположить его дочерние элементы. Но так как ваше текстовое представление имеет только размер вашего текста, гравитация не будет показывать никакой разницы. Так что просто сделайте просмотр текста, чтобы заполнить родительский.

Но я думаю, что RelativeLayout гораздо более подходит для этого, чем FrameLayout. Используя RelativeLayout это выглядит так

RelativeLayout rLayout = new RelativeLayout(this);
LayoutParams rlParams = new LayoutParams(LayoutParams.FILL_PARENT
        ,LayoutParams.FILL_PARENT); 
rLayout.setLayoutParams(rlParams);

ImageView image= new ImageView(this); 
image.setImageResource(R.drawable.icon);    
image.setLayoutParams(rlParams);

RelativeLayout.LayoutParams tParams = new RelativeLayout.LayoutParams
        (LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
tParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
tParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
TextView text=new TextView(this); 
text.setText("GOLDEN Gate"); 
text.setTextColor(Color.WHITE);                            
text.setTypeface(Typeface.DEFAULT_BOLD);
text.setLayoutParams(tParams);

rLayout.addView(image);
rLayout.addView(text);
setContentView(rLayout);
1 голос
/ 10 октября 2011

Вместо FrameLayout вы можете попробовать использовать RelativeLayout в качестве контейнера.Таким образом, вы можете разместить наложенный текст где угодно.Вам следует назначить TextView в RelativeLayout следующее:

android:layout_alignParentBottom="true" and android:layout_centerInParent="true"

После этого можно точно настроить размещение с полями.

...