Cómo crear exactamente botones cuadrados que rellenan el ancho de la pantalla

Tengo una actividad que se llenan con algunos botones dinámicamente base en TableLayout y TableRow como esto:

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); } 

Quiero hacer una lista de 5 * 5 de botones que 1: Todos ellos tienen la misma anchura y altura y 2: hacerlos llenar de pantalla. En mi código tengo un diseño llamado my_button, como:

 <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> 

y los resultados son: introduzca la descripción de la imagen aquí introduzca la descripción de la imagen aquí

Tengo cambiar la gravedad, pero no funciona. ¿Hay alguna manera de hacer que exactamente cuadrados y llenar el ancho de la pantalla.

Debe subclase Vista de Button y reemplazo por debajo de la función:

 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 } } 

Editar: Ok, usted necesita personalizar su botón como se indica más arriba. A continuación, en lugar de utilizar el botón predeterminado, puede utilizar el botón cuadrado anterior.

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

usted tiene que obtener dinámicamente el ancho de la pantalla como este:

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

Y después de conseguir esto usted tiene que dividir la anchura por 5 de modo que usted esté teniendo anchura de un botón sobre la base del ancho de la pantalla.

 int buttonWidthAndHeight = width/ 5; 

Ahora cuando usted está agregando el botón a su disposición de la tabla fije el ancho y la altura del botón también como esto:

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

Codificación feliz !!!!!

Por favor, pruebe este código, coloque el button_rect_shape.xml en una carpeta dibujable.

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> 
  • ListView o TableLayout?
  • ¿Qué hace exactamente android: layout_column?
  • Cursor no es visible en EditText cuando se agrega dinámicamente la vista
  • TableRow llenar el espacio restante
  • Datos dinámicamente de datos de tabla de Android
  • Diseño de tabla XML? ¿Dos filas de la misma anchura con botones de igual anchura?
  • Cómo mostrar la imagen en la fila de la tabla en función del tamaño
  • ¿Cómo obtener el evento de clic de la fila de la tabla / elemento de la tabla?
  • Cómo combinar fila en una celda en la disposición de la tabla en android, dinámicamente?
  • Las vistas agregadas a TableLayout no se muestran mediante programación
  • Líneas de borde para celdas en GridLayout, TableLayout o GridView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.