2017-09-02 119 views
0

如何使用按钮进行简单网格视图?我尝试了最明显的解决方案,但它不起作用。教程非常糟糕(对我而言),简单的解决方案无法工作。带按钮的简单网格视图

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

回答

1

SpinnersGridViewsListViews是Android的AdapterViews的子类。这意味着它们没有子元素,并且它们是使用扩展BaseAdapter类的自定义适配器以编程方式动态创建的。

Android AdapterViews

要做到你需要什么,首先创建一个空的活动并将其命名为GridActivity。将activity_grid.xml布局文件编辑为空的GridView。 示例 -

<?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" /> 

然后在你的项目中创建一个新的类命名,如ButtonAdapter的如下 -

记住按钮的总数可以在变量total_btns这是20默认设置。

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

最后,变更GridActivityonCreate方法来设置GridView控件在创建。

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

这将使用按钮创建您想要的网格视图。一旦你触发网格活动,你会得到下面的输出 -

enter image description here

在适配器类的点击监听器可以进行编辑处理每一次点击。希望能帮助到你!

相关问题