2016-07-27 3 views
0

Ich versuche, vier dynamisch generierte Schaltflächen anzupassen, um gleichmäßigen Speicherplatz in einem GridLayout zu belegen. Ich habe alles versucht, was ich nur kann, von der Einstellung LayoutParams auf die onMeasuredWidth, aber ich kann einfach nicht erreichen, was ich will.Wie mache ich, dass dynamisch generierte Schaltflächen in einem GridLayout in Android sogar Platz beanspruchen?

This ist das, was ich will, und das finden, was ich

enter image description here

Ich habe am Ende immer sah in this und viele andere, keiner von ihnen eine Lösung vorgeschlagen.

Im Anschluss an die XML (content.xml) gehen Sie bitte wie GridLaayout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="accordiontry.juspay.accordiontry.MainActivity" 
    tools:showIn="@layout/activity_main" 
    android:orientation="vertical"> 


    <GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:columnCount="2"> 

    </GridLayout> 
</LinearLayout> 

Und finden Sie die MainActivity.java

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.Typeface; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.ViewGroup; 
import android.view.animation.Animation; 
import android.view.animation.LinearInterpolator; 
import android.view.animation.RotateAnimation; 
import android.webkit.WebView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.GridLayout; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    private GridLayout gridLayout; 
    private final int NumOfCol = 2; 
    private final int NumOfRows = 2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     init(); 
     generateView(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void init() 
    { 
     gridLayout = (GridLayout) findViewById(R.id.gridLayout); 
     gridLayout.setBackgroundColor(Color.BLUE); 
     gridLayout.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    } 

    public void generateView() 
    { 
     Button btn1 = new Button(this); 
     Button btn2 = new Button(this); 

     btn1.setText("BUTTON 1"); 
     btn1.setWidth(gridLayout.getMeasuredWidth()); 
     gridLayout.addView(btn1); 

     btn2.setText("BUTTON 2"); 
     btn2.setWidth(gridLayout.getMeasuredWidth()); 
     gridLayout.addView(btn2); 

    } 

} 
+0

Was möchten Sie tun? Gibt es immer genau 4 Knöpfe in einer Reihe? Wenn dies der Fall ist, möchten Sie kein GridLayout verwenden, sondern ein LinearLayout (wenn nicht scrollen) oder ein RecyclerView mit einem LinearLayoutManager, der auf Horizontal eingestellt ist, wenn Sie scrollen möchten. –

+0

Ich versuche, eine variable Anzahl von Schaltflächen in meinem 'GridLayout' anzupassen. Ich möchte, dass eine Methode die Anzahl der Spalten als Argument annimmt und auf dieser Grundlage Schaltflächen generiert. Die Zeile ist immer auf 2 festgelegt. Wenn meine Spalte also 3 ist, sollte sie insgesamt 6 Schaltflächen generieren. Wenn 2, dann 4 Tasten. Ich kann die Anzahl der Schaltflächen abrufen, aber die Breite der Schaltfläche kann nicht so festgelegt werden, dass sie in GridLayout den gleichen Speicherplatz belegt. Ich kann diese Breite nicht einstellen – Auro

Antwort

0

Ich habe überprüft den Code enthält, wie in Ihr XML-Layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="accordiontry.juspay.accordiontry.MainActivity" 
    tools:showIn="@layout/activity_main" 
    android:orientation="vertical"> 


    <GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     android:columnCount="2"> 

    </GridLayout> 
</LinearLayout> 

oder setzen fix Höhe Grid

das funktioniert gut in meinem Fall

0

Was meinst du mit „dynamisch“ zu sagen? Hinzufügen einer Schaltfläche nach Benutzer? Wenn ja, könnten Sie Knopf mit bereits bekannter Breite und Höhe hinzufügen und sie an Orten, die Sie wollen, UND dann android:alpha="0" (oder 1, Entschuldigung, erinnere mich nicht, versuchen beide) und android:enabled="false" und löschen Sie alle Informationen von Tasten. Es wird eine lange Zeit dauern, aber Sie werden perfekt wissen, dass sie auf ihren Plätzen sein werden.

Verwandte Themen