Изменить позицию просмотра - PullRequest
2 голосов
/ 28 августа 2011

My View не генерируется программно, но его можно найти с помощью функции findbyid.После получения вида мне нравится правильно его позиционировать.

Для этого я использую функцию layout , чтобы изменить позицию просмотра в onCreate с заданными параметрами.Проблема в том, что не работает должным образом и вид остается в левом верхнем углу.

Функция работает нормально при использовании ее на Touch после загрузки активности.Что я делаю не так, есть ли другое, чтобы установить представление на основе этих четырех параметров, которые использует layout .

Edit:

Параметры загружаются из БД.Вот что я использую в onCreate:

setContentView(R.layout.baseview);

View view=(ImageView) findViewById(R.id.blah);      

int top=cursor.getInt(cursor.getColumnIndex(CallerViewDB.TOP));
int bottom=cursor.getInt(cursor.getColumnIndex(CallerViewDB.BOTTOM));
int left=cursor.getInt(cursor.getColumnIndex(CallerViewDB.LEFT));
int right=cursor.getInt(cursor.getColumnIndex(CallerViewDB.RIGHT));
view.layout(left, top, right, bottom);

Загруженные значения верны, проверил это в браузере sqllite.Кажется, что вызов функции компоновки в onCreate ничего не делает.Есть ли альтернатива?

Ответы [ 3 ]

5 голосов
/ 28 августа 2011

Хорошо, после некоторого исследования, вот как это делается:

RelativeLayout.LayoutParams parms=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
parms.leftMargin=left;
parms.rightMargin=right;
parms.topMargin=top;
parms.bottomMargin=bottom;
view.setLayoutParams(parms);
1 голос
/ 14 марта 2012
/**
 onPreDraw: Callback method to be invoked when the view tree is about to be
 drawn. At this point, all views in the tree have been measured and given a
 frame. Clients can use this to adjust their scroll bounds or even to request
 a new layout before drawing occurs.
*/

ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
OnPreDrawListener onPreDrawListener = new OnPreDrawListener()
{
    @Override
    public boolean onPreDraw()
    {
        view.layout(....);
        return true;
    }
};
viewTreeObserver.addOnPreDrawListener(onPreDrawListener);
0 голосов
/ 28 августа 2011

Это очень плохая идея в большинстве сценариев. Устройства Android различаются по размеру экрана, ориентации и разрешению. Рекомендуется не использовать абсолютное позиционирование, а вместо этого использовать относительное позиционирование.

Читайте о RelativeLayout, и я уверен, что он будет делать то, что вам нужно.

...