Как можно использовать относительное расположение в приложении Android, чтобы переместить положение кнопки изображения в определенную позицию? - PullRequest
0 голосов
/ 03 января 2012

Я создаю приложение для Android, которое перемещает кнопку изображения случайным образом на экране. Я не понимаю, какой макет может помочь. Абсолютный макет используется для использования осей x и y, но теперь он устарел.это не работает ... я хочу генерировать случайные номера, чтобы поместить это в положение x, y, чтобы моя кнопка продолжала двигаться.вот что я сделал

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    submit = (Button)findViewById(R.id.submit1);
    submit.setOnClickListener(this);
   machar = (ImageButton)findViewById(R.id.machar);
    ed=(EditText)findViewById(R.id.eT1);
    tb=(ToggleButton)findViewById(R.id.tb1);
    tb.setOnClickListener(this);
  RelativeLayout r1 =(RelativeLayout)findViewById(R.id.l1);

    LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    params.leftMargin=10;
    params.rightMargin=20;
    params.topMargin=30;
    params.bottomMargin=40;
    r1.setLayoutParams(params);
    r1.addView(machar);

}

здесь machar - кнопка изображения ... этот код не работает ... XML-файл содержит тег относительной компоновки с именем l1 и внутри него кнопку изображения с именем machar... что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 03 января 2012

Я думаю, что ваша проблема может быть в том, что вы пытаетесь добавить представление, которое уже было добавлено.Machar ImageButton уже был объявлен в xml и поэтому рисуется на экране, когда вы вызываете setContentView.

. То, что я предлагаю, - это создание Machar ImageButton программно, то есть не объявляя его в макете XML,вместо этого создайте его во время вашего onCreate метода.

0 голосов
/ 07 февраля 2012

После изменения какого-либо поля вам нужно позвонить на requestLayout()

public void requestLayout()

Вызовите это, когда что-то изменилось, что сделало недействительным макет этого представления.Это запланирует передачу макета дерева представления.

Вы должны вызвать requestLayout() для вашего элемента View, и если RelativeRule не равны set над элементом, margin будет контролировать положение внутри RelativeLayout.

0 голосов
/ 03 января 2012

Как вы обнаружили, в относительной компоновке нет абсолютной позиции. Вы можете изменить поля справа и сверху вершины махара случайным образом, чтобы переместить кнопку ImageButton.

...