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:
- Cómo combinar fila en una celda en la disposición de la tabla en android, dinámicamente?
- Línea de encabezado de TableLayout de Android
- Cómo ampliar Android TableLayout
- Líneas de borde para celdas en GridLayout, TableLayout o GridView?
- ¿Cómo hacer un TableLayout desplazable?
<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:
Tengo cambiar la gravedad, pero no funciona. ¿Hay alguna manera de hacer que exactamente cuadrados y llenar el ancho de la pantalla.
- ¿Cómo funciona android: shrinkColumns y android: stretchColumns?
- Cómo establecer divisor entre columnas en tablelayout?
- Adaptador personalizado para la vista de lista
- ¿Cuál es la mejor manera de crear una tabla de datos en android?
- (TableLayout) findViewById (excepción de puntero nulo
- TableLayout con layout_width = matchparent que no coincide con el padre
- Hacer células de igual anchura y altura para llenar la tabla
- implementar android: stretchColumns = "*" programatically en Android
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>
- Android / Java rara y aparentemente imposible excepción causando fuerza cerrar
- Cordova backbutton evento no funciona