Странное верхнее поле при программном использовании AddView

У меня большая проблема. Я пытаюсь программно добавить Imageview, но столкнулся со странной проблемой:

Я поместил в XML только пустой относительный макет, соответствующий родителю. С точки зрения кода я добавляю изображение к относительному макету.

Все работает, изображение видно и имеет правильный размер, но проблема в том, что позиция "0,0" странная. Кажется, что у него есть верхнее поле, тогда как вместо этого левое поле правильно равно 0. Также принудительное изменение позиции на «0,0» с помощью SetX/SetY приводит к этой странной верхней границе:

Изображение:

введите здесь описание изображения

Код:

base_layout = (RelativeLayout) findVieById(R.id.base_layout);

image_logo = New Imageview(this);
base_layout.AddView(image_logo);

image_logo.SetPadding(0,0,0,0);
image_logo.SetX(0);
image_logo.SetY(0);
image_logo.SetImageResource(R.drawable.generic_image);
image_logo.SetVisibility(View.VISIBLE);

Я не понимаю, почему... активность в манифесте имеет свой обычный флаг Theme.NoTitleBar.Fullscreen.

Любая помощь? Это будет действительно оценено!


person user13400    schedule 04.07.2014    source источник
comment
Чтобы получить быстрый полезный ответ (и сделать ваш вопрос более полезным), покажите нам, что вы сделали в коде, чтобы мы могли понять, что происходит.   -  person Rudi Kershaw    schedule 04.07.2014
comment
Вы пытались установить отступы элемента RelativeLayout на 0?   -  person Rudi Kershaw    schedule 04.07.2014
comment
Привет, я отредактировал это сообщение.   -  person user13400    schedule 04.07.2014
comment
Привет, Руди, спасибо за быстрый ответ. Нет, даже с отступом 0, 0, 0, 0 он показывает эту границу. Я думаю, что-то связано с заголовком, но я не понимаю... с помощью xml он работает отлично.   -  person user13400    schedule 04.07.2014
comment
Вы уверены, что крошечная щель вверху — это не просто полоса, на которой отображается время автономной работы/беспроводной сигнал и уведомления?   -  person Rudi Kershaw    schedule 04.07.2014
comment
Привет, Руди, еще раз спасибо. Поскольку я установил полноэкранный режим и не вижу панели заголовка, я не вижу никаких уведомлений / батареи / панели Wi-Fi, приложение полностью полноэкранное. Но да, кажется, что это пространство считается занятым ... поэтому, даже если я вижу синий фон моего RelativeLayout, позиция 0,0 экрана кажется смещенной по оси Y. Есть ли у вас какие-либо идеи? помощь :((   -  person user13400    schedule 04.07.2014


Ответы (1)


Я собрал пример с использованием RelativeLayout.LayoutParams и попробовал сам, и все работает нормально.

 base_layout = (RelativeLayout) findViewById(R.id.base_layout);        
 ImageView image_logo = new ImageView(this);
 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(width, height);
 image_logo.setLayoutParams(lp);
 base_layout.addView(image_logo);

Выше показан эффект ниже при запуске.

введите здесь описание изображения

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" использовался в манифесте против этого Activity.

person Rudi Kershaw    schedule 04.07.2014
comment
Использование флага манифеста FULLSCREEN фактически скрывает панель уведомлений, но я не уверен, что это влияет и на координаты макета. Как вы думаете, добавление следующего решит мою проблему? getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); - person user13400; 04.07.2014