2016-06-13 12 views
5
in der Breite des Bildschirms füllen

Ich habe eine Tätigkeit, die mit einigen Tasten dynamisch stützen auf Tablelayout und TableRow wie folgt füllen:Wie genau quadratische Tasten erstellen, die

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

ich eine 5 * 5 Liste machen wollen von Knöpfen, die 1: Alle von ihnen haben die gleiche Breite und Höhe und 2: machen sie füllen Bildschirm. In meinem Code ich habe ein Layout, das my_button genannt, wie:

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

oder

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

und Ergebnisse ist: enter image description here enter image description here

ich die Schwerkraft ändern, aber es doesn‘ t funktioniert. Gibt es eine Möglichkeit, sie genau quadratisch zu machen und die Breite des Bildschirms zu füllen.

+0

Bitte posten Sie Ihre @ ziehbar/button_style Code hier, ich glaube, Sie Eckenradius Wert gesetzt. bitte entferne oder setze den Wert auf 0. –

+0

@MohanRajS ja Ich habe dort einen Wert, aber wenn ich ihn auf 0 setze, hat sich nichts geändert. – Beppe

+0

bitte aktualisieren android studio –

Antwort

9

Sie sollten Unterklasse Button Ansicht und außer Kraft setzen unten Funktion:

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, Sie benötigen eine Taste wie oben anpassen. Anstatt die Standardschaltfläche zu verwenden, können Sie das obige SquareButton verwenden.

<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

Wie neu ich in Android, können Sie mir sagen, wie kann ich es verwenden? – Beppe

+0

@Beppe Überprüfen Sie die Antwort bearbeiten –

+0

Danke, du bist brillant. – Beppe

0

Sie müssen dynamisch die Breite des Bildschirms wie diese:

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

Und danach bekommen Sie haben die Breite von 5 so zu teilen, dass Sie Breite einer Taste auf der mit wird Basis der Bildschirmbreite. Jetzt

int buttonWidthAndHeight = width/ 5; 

wenn Sie Schaltfläche, um Ihre Tabellenlayout Hinzufügen gesetzt, um die Breite und Höhe der Schaltfläche auch wie folgt aus:

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

Glücklich Coding !!!!!

+0

Es funktioniert nicht, in Ihrem Code lp bekommen nur Höhe Wert und lp.width hat -1 Wert.! – Beppe

0

Bitte versuchen Sie diesen Code, legen Sie die button_rect_shape.xml auf zeichnenden Ordner.

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

Entschuldigung, es funktioniert nicht. – Beppe

+0

Ok gut, das ist, was ich zu meiner Entwicklung verwendet habe, Sorry, ich habe keine andere Idee als diese. –