2011-10-06 4 views
0

У меня есть некоторые кнопки, выложенные в формате RelativeLayout, и я хочу поместить последнюю кнопку прямо под вторым последним, а также посередине экрана. Первоначально, когда мои кнопки были одна под другой, мой файл XML несколько выглядел следующим образом:Оптимизация кода в java/XML - разработка Android

// некоторые кнопки

<Button 
     android:id="@+id/cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/ok" 
     android:layout_marginLeft="5dip" 
     android:layout_below="@id/entry" 
     android:text="Cancel" /> 
    <Button 
     android:id="@+id/pickdate" 
     android:layout_width="100dip" 
     android:layout_height="40dip" 
     android:layout_below="@id/cancel" 
     android:layout_marginTop="25dip" 
     android:layout_marginLeft="30dip" 
     android:text="Set Date" /> 

, но когда я хотел установить LeftMargin кнопки «Установить дату» (последний) до "width of screen"/2, мне пришлось закодировать его на Java, получив ширину, используя getWindowManager.getDefaultDisplay(). Но при его выполнении казалось, что атрибуты XML, определенные для последней кнопки (только параметры макета), все игнорируются. Я думаю, это потому, что java-код анализируется после XML и переопределяет поведение, определенное в XML. Я должен был установить все атрибуты макета в самом файле src Java. Вот код Java:

 Display display = getWindowManager().getDefaultDisplay(); 
     int w = display.getWidth(); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

     params.setMargins(w/2, 25, 0, 0); 
     params.width = 200; 
     params.height = 50; 
     params.addRule(RelativeLayout.BELOW, R.id.cancel); 
     datepick.setLayoutParams(params); 

Для всего лишь одного атрибута. Мне пришлось установить все атрибуты в Java. Есть ли способ обойти это? Что-то вроде ссылки на мою переменную w в XML .. любые предложения помогут.

ответ

0

Извините, что не ясно, что вы здесь делаете? Вы просто пытаетесь создать вертикальный список кнопок в центре экрана? Почему бы просто не установить гравитацию в ViewGroup на center?

+0

Я изучаю, как использовать разные макеты в андроиде. У меня есть список кнопок, но позволяет говорить только о одной кнопке. Я хочу, чтобы кнопка была посередине экрана, т. Е. Я хочу рассчитать ее LeftMargin во время выполнения, поэтому, очевидно, XML не сможет сделать это для меня ... Поэтому я сделал это с помощью Java и должен был повторно -define все атрибуты снова, поскольку LayoutParams в XML игнорировались в момент, когда он встретил datepick.setLayoutParams (params); – Rushil

+0

Я не хочу снова определять все параметры (ширина, высота, относительно того), но только маржа. Как это сделать? – Rushil

+0

Если вы хотите поместить кнопку в центр экрана, вам не нужно вычислять левое поле – slayton

Смежные вопросы