Android getHeight () / getWidth с RelativeLayout - PullRequest
       25

Android getHeight () / getWidth с RelativeLayout

3 голосов
/ 28 сентября 2011

Привет, я новичок в Android и сталкиваюсь с проблемой: как мне получить высоту / ширину вида, который размещен в относительной компоновке?Я попытался getHeight () и getWidth (), и оба возвращают 0.

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

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

edit: я использую этот код, чтобы создать EditText и добавить его в макет:

                EditText et1 = new EditText(context);
                RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
                p.addRule(RelativeLayout.RIGHT_OF,curView.getId());
                et1.setLayoutParams(p);
                et1.setId(loopid++);
                curLayout.addView(et1);
                curView=et1;

, а затем позвоните:

            int[] location=new int[2];
            curView.getLocationOnScreen(location);
            Log.d("right:", String.valueOf(location[1]));

, и он показывает 0.

Ответы [ 3 ]

4 голосов
/ 28 сентября 2011

Вы вызываете getHeight () / getWidth () до того, как представление может быть размечено, поэтому оно возвращает 0. Если вы вызовете его позже в жизненном цикле, это остановит эту проблему.

1 голос
/ 28 сентября 2011

Как только ваши представления созданы, UIThread раздувает их.Поэтому, когда вы их создаете, они не имеют размера.попробуйте использовать

ViewTreeObserver vto = curView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() 
{
    public boolean onPreDraw()
    {
        curView.getLocationOnScreen(location);
    }
}

Не уверен, что это будет работать, хотя

0 голосов
/ 04 января 2012
final Button button = new Button(this);
button.setText("123");
TextPaint paint = button.getPaint();
float len = paint.measureText(button.getText().toString());

Этот len даст ширину кнопок после плюс фиксированное значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...