2017-09-02 2 views
0

Wie kann ich einfache Rasteransicht mit Tasten machen? Ich habe die offensichtlichste Lösung versucht, aber es funktioniert nicht. Tutorials sind wirklich schlecht (für mich), und die einfache Lösung funktioniert nicht.Einfache Rasteransicht mit Tasten

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <GridView 
     android:id="@+id/gridView" 
     android:layout_width="match_parent" 
     android:layout_height="155.5dp" 
     android:numColumns="2" 
     android:padding="10dp" 
     android:layout_marginBottom="68.0dp" 
     android:background="#009967"> 
     <Button 
     android:text="Button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/button1" /> 
    </GridView> 

</LinearLayout> 

Antwort

1

Spinners, GridViews und ListViews sind Subklassen von android AdapterViews. Dies bedeutet, dass sie keine untergeordneten Elemente haben und dynamisch mithilfe von benutzerdefinierten Adaptern, die die Klasse BaseAdapter erweitern, programmgesteuert erstellt werden.

Android AdapterViews

zu tun, was Sie brauchen, um zunächst eine leere Aktivität erstellen und GridActivity nennen. Bearbeiten Sie die Layoutdatei activity_grid.xml in eine leere GridView. Beispiel -

<?xml version="1.0" encoding="utf-8"?> 
<GridView 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" 
    tools:context="com.example.user.gridbuttonview.GridActivity" 
    android:columnWidth="90dp" 
    android:id="@+id/activity_grid" 
    android:gravity="center" 
    android:horizontalSpacing="10dp" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="10dp" /> 

Dann eine neue Klasse in Ihrem Projekt mit dem Namen ButtonAdapter schaffen wie die folgt -

Kenntnis, dass sich die Gesamtzahl der Tasten kann in der Variablen total_btns eingestellt werden, die standardmäßig 20 ist.

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.Toast; 

public class ButtonAdapter extends BaseAdapter 
{ 
    private Context mContext; 
    private int btn_id; 
    private int total_btns = 20; 

    public ButtonAdapter(Context context) { 
     this.mContext = context; 
    } 

    @Override 
    public int getCount() { 
     return total_btns; 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(final int i, View view, ViewGroup viewGroup) 
    { 
     Button btn; 

     if (view == null) { 
      btn = new Button(mContext); 
      btn.setText("Button " + (++btn_id)); 
     } else { 
      btn = (Button) view; 
     } 

     btn.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Toast.makeText(v.getContext(), "Button #" + (i + 1), Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     return btn; 
    } 
} 

schließlich, ändern Sie Ihre GridActivity Klasse onCreate Methode Gridview auf Schöpfung zu setzen.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_grid); 

    GridView gridview = (GridView) findViewById(R.id.activity_grid); 
    gridview.setAdapter(new ButtonAdapter(this)); 
} 

Dies erstellt Ihre Rasteransicht, die Sie möchten, mit Schaltflächen. Und wenn Sie die Netzaktivität auslösen, erhalten Sie die folgende Ausgabe -

enter image description here

Der Klick Zuhörer in der Adapterklasse kann bearbeitet werden, um jeden Klick zu behandeln. Ich hoffe es hilft!