2016-02-09 20 views
5

Ho un po 'di XML. In questo XML c'è un singolo pulsante all'interno di un layout relativo. Il layout relativo occupa l'intero schermo. Voglio che il pulsante abbia 1/3 della larghezza e dell'altezza dello schermo. Come potrei farlo?Pulsante Android fa 1/3 di larghezza e altezza dello schermo nel relativo layout

Ecco l'XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="0dp" 
    android:paddingRight="0dp" 
    android:paddingTop="0dp" 
    android:paddingBottom="0dp" 
    tools:context="com.vroy.trapper.MainMenuActivity" 
    android:layout_weight="2"> 

    <Button 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:text="@string/menu_button_text" 
     android:background="@drawable/round_button" 
     android:id="@+id/button" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     /> 
</RelativeLayout> 

ho guardato this domanda, ma anche se ho assegnato un peso per la disposizione relativa in sé non ho potuto assegnare un peso al pulsante.

risposta

8

è possibile farlo facilmente in codice java.

scrivere questo codice in oncreate.

Button b=(Button) findViewById(R.id.button); 
    int width = getResources().getDisplayMetrics().widthPixels/3; 
    int hei=getResources().getDisplayMetrics().heightPixels/3; 
    b.setLayoutParams(new RelativeLayout.LayoutParams(width,hei)); 
0

Utilizzare LinearLayout anziché RelativeLayout per raggiungere l'obiettivo.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     /> 
    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="vertical"> 
     <View 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      /> 
     <Button 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:text="@string/menu_button_text" 
      android:background="@drawable/round_button" 
      android:id="@+id/button"/> 
      <View 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      /> 
    </LinearLayout> 
    <View 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     /> 

    </LinearLayout> 

Spero che aiuti !!

+0

Il problema è che voglio un layout relativo per il mio layout generale. – Roymunson

+0

Capisco ma non è possibile usare il peso in RelativeLayout, questo elemento è per widget all'interno di LinearLayout :(... Ma potresti usare RelativeLayout come layout genitore e al suo interno mettere il LinearLayout pubblicato con android: layout_width = "match_parent" and android: layout_height = "match_parent" .Questo è uno dei trucchi di uso RelativeLayout combinato con LinearLayout –

2

(MODIFICATO per considerare anche la larghezza) Avvolgere il pulsante attorno a un layout lineare.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="0dp" 
    android:paddingLeft="0dp" 
    android:paddingRight="0dp" 
    android:paddingTop="0dp"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="center" 
     android:weightSum="3" > 
     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:gravity="center" 
      android:weightSum="3"> 

      <Button 
       android:id="@+id/button" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:layout_weight="1" 
       android:text="@string/menu_button_text" 
       android:background="@drawable/round_button" 
       /> 
     </LinearLayout> 
    </LinearLayout> 
</RelativeLayout> 

Modificare il android:gravity se si desidera che il pulsante per essere a destra/sinistra ecc Con questo, si potrebbe ancora utilizzare il layout relativo per altre cose che lo circondano.

+0

La tua versione del codice sembra fare in modo che il pulsante occupi 1/3 dell'altezza dello schermo, ma non 1/3 della larghezza dello schermo Forse è perché hai impostato la larghezza a '" match_parent "'? – Roymunson

+0

Ho modificato anche la larghezza, aggiungendo LinearLayout aggiuntivo.Non è il modo più bello di fare le cose, dal momento che è il layout nidificato – Elye

+0

La migliore risposta, grazie molto! – middlehut

4

La libreria di supporto percentuale è la cosa che ti serve.

Questa libreria è piuttosto facile da usare poiché è lo stesso RelativeLayout e FrameLayout con cui abbiamo familiarità, solo con alcune funzionalità aggiuntive.

Prima di tutto, poiché Libreria di supporto percentuale accompagna la libreria di supporto di Android 23 quindi assicurati di aggiornare la libreria di supporto di Android in SDK Manager all'ultima versione già. E poi aggiungere una dipendenza come qui di seguito in build.gradle di file:

compilazione 'com.android.support:percent:23.0.0'

Ora tornare alla tua domanda, si può fare qualcosa come questo per raggiungere il tuo risultato. Spero ti possa aiutare.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<Button 
    android:id="@+id/button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/bird" 
    android:text="Your text" 
    app:layout_heightPercent="33%" 
    app:layout_widthPercent="33%" /> 
</android.support.percent.PercentRelativeLayout> 
+1

Si prega di votare se la mia risposta ti ha aiutato. – Rahul