2016-06-13 15 views
5

Ho un'attività che si riempiono di alcuni pulsanti dinamicamente basare su TableLayout e TableRow come questo:Come creare pulsanti esattamente quadrati che riempiono in larghezza dello schermo

private TableLayout buttonTableLayout; 
    //----- 
    for (int row = 0; row < buttonTableLayout.getChildCount(); ++row) 
     ((TableRow) buttonTableLayout.getChildAt(row)).removeAllViews(); 

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    for (int row = 0; row < 5; row++) { 
     TableRow currentTableRow = getTableRow(row); 

     for (int column = 0; column < 5; column++) { 
       Button newGuessButton = (Button) inflater.inflate(R.layout.my_button, currentTableRow, false); 
       newGuessButton.setText(String.valueOf((row * 5) + column + 1)); 
       currentTableRow.addView(newGuessButton); 
      } 

     } 
    } 
    //---- 
    private TableRow getTableRow(int row) { 
     return (TableRow) buttonTableLayout.getChildAt(row); 
    } 

voglio fare una lista 5 * 5 di pulsanti che 1: tutti hanno la stessa larghezza e altezza e 2: li fanno riempire di schermo. Nel mio codice che ho un layout che di nome my_button, come:

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/newButton" 
android:layout_width="60dp" 
android:layout_height="60dp" 
android:background="@drawable/button_style"></Button> 

o

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/newButton" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:background="@drawable/button_style"></Button> 

e risultati è: enter image description here enter image description here

ho cambiare la gravità, ma doesn' funziona. C'è un modo per renderli esattamente quadrati e riempire la larghezza dello schermo.

+0

Si prega di inviare il vostro @ drawable/code button_style qui, penso che si imposta il valore del raggio d'angolo. si prega di rimuovere o impostare il valore come 0. –

+0

@MohanRajS sì, ho un valore lì, ma quando ho impostato su 0 non è cambiato nulla. – Beppe

+0

si prega di aggiornare Android Studio –

risposta

9

Si dovrebbe sottoclasse Button vista ed eseguire l'override di seguito la funzione:

public class SquareButton extends Button { 
public SquareButton(Context context) { 
    super(context); 
} 

public SquareButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public SquareButton(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public SquareButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
} 

@Override 
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    int width = MeasureSpec.getSize(widthMeasureSpec); 
    int height = MeasureSpec.getSize(heightMeasureSpec); 
    int size = width > height ? height : width; 
    setMeasuredDimension(size, size); // make it square 

} 
} 

Edit: Ok, è necessario personalizzare il pulsante di cui sopra. Quindi, invece di usare il pulsante predefinito, puoi usare SquareButton sopra.

<com.kingfisher.utils.SquareButton 
      android:id="@+id/btnSearch" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="100" 
      android:text="Downloaded"/> 
+0

Come nuovo in Android, puoi dirmi come posso usarlo? – Beppe

+0

@Beppe controlla la risposta di modifica –

+0

grazie, sei geniale. – Beppe

0

dovete ottenere dinamicamente la larghezza della schermata come questa:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

e dopo avere ottenuto questo si deve dividere la larghezza da 5 in modo che vi sarà di avere larghezza di un pulsante sul base della larghezza dello schermo.

int buttonWidthAndHeight = width/ 5; 

Ora, quando si aggiunge il pulsante per il layout tavolo impostare la larghezza e l'altezza del pulsante così come questo:

TableLayout.LayoutParams lp= new TableLayout.LayaoutParams(buttonWidthAndHeight ,buttonWidthAndHeight); // width,height 
newGuessButton.setLayoutParams(lp); 

Felice Coding !!!!!

+0

Non funziona, nel tuo codice lp ottieni solo il valore di altezza e lp.width ha ottenuto il valore -1.! – Beppe

0

Si prega di provare questo codice, posizionare il button_rect_shape.xml sulla cartella drawable.

button_rect_shape.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    /> 


<solid android:color="#fc5117"/> 
    <!--<stroke 
     android:width="1dp" 
     android:color="#ffffff" /> 
--> 

    <!--<gradient android:angle="270" 
     android:centerColor="#fc5117" 
     android:endColor="#fc5117" 
     android:startColor="#fc5117" />--> 
</shape> 

SampleLayout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 



    <LinearLayout 
     android:layout_width="200dp" 
     android:layout_height="100dp" 


     android:layout_gravity="center_horizontal" 
     android:background="@drawable/button_rect_shape" 
     /> 



</LinearLayout> 
+0

scusa, non funziona. – Beppe

+0

Ok bene, questo è quello che ho usato per il mio sviluppo, scusa non ne ho idea oltre a questo. –