2015-04-05 38 views
1

我想制作一个按钮,以便按第一个框出现在按钮下方,第二个到第一个右侧,第3月1日在下面等,有点像这样:用于以类似网格的方式添加框的按钮

[Button] 
[1st][2nd] 
[3rd][4th] 
[5th] ... 

我有一些代码,从一些不错的球员,但同时它确实增加了他们的意见得到堆叠在彼此的顶部,而不是在一个方式我如上所示。有人可以帮助我吗?

下面是代码:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RelativeLayout; 

public class teamCreateScreen extends Activity { 

    int i = 0; 

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

    public void createTeam(View view) { 
     final RelativeLayout rlTeam = (RelativeLayout) findViewById(R.id.rlTeam); 
     RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     Button tv = new Button(getApplicationContext()); 
     if (tv.getId() > 0) { 
      relativeParams.addRule(RelativeLayout.BELOW, tv.getId()); 
     } 
     tv.setText("New Team"); 
     tv.setId(i); 
     rlTeam.addView(tv, relativeParams); 
     i++; 
    } 
} 

而且在其中添加的XML布局的观点:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/rlTeam"> 

    <Button 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:id="@+id/teamAddBtn" 
     android:text="+" 
     android:textSize="30sp" 
     android:onClick="createTeam"/> 

</RelativeLayout> 
+0

替换relativeParams.addRule(RelativeLayout.BELOW,tv.getId());与relativeParams.addRule(RelativeLayout.BELOW,view.getId()); – 2015-04-05 20:32:04

+0

做到了,没有任何改变:/ – Richard 2015-04-05 20:35:11

+0

我可以问你为什么要这么做吗? – 2015-04-05 20:48:34

回答

0

我认为,这是例如做最好的事情Android GridView

无论如何尝试这一代码:

public class MainActivity extends ActionBarActivity { 

private int counter = 0; 
private int lastId = -1; 

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

public void createTeam(View view) { 
    final RelativeLayout rlTeam = (RelativeLayout) findViewById(R.id.rlTeam); 
    RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    Button tv = new Button(getApplicationContext()); 

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 

     tv.setId(Utils.generateViewId()); 

    } else { 

     tv.setId(View.generateViewId()); 

    } 

    if(lastId == -1) { 
     relativeParams.addRule(RelativeLayout.BELOW, view.getId()); 
     counter++; 
    } else if(counter == 1) { 
     relativeParams.addRule(RelativeLayout.RIGHT_OF, lastId); 
     relativeParams.addRule(RelativeLayout.ALIGN_TOP, lastId); 
     counter++; 
    } else if(counter == 2) { 
     relativeParams.addRule(RelativeLayout.BELOW, lastId); 
     counter = 1; 
    } 


    tv.setText("New Team"); 

    lastId = tv.getId(); 

    rlTeam.addView(tv, relativeParams); 
} 

的utils的类:

import java.util.concurrent.atomic.AtomicInteger; 

/** 
* Created by Hema on 05/04/2015. 
*/ 
public class Utils { 
    private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); 

    /** 
    * Generate a value suitable for use in {@link #setId(int)}. 
    * This value will not collide with ID values generated at build time by aapt for R.id. 
    * 
    * @return a generated ID value 
    */ 
    public static int generateViewId() { 
     for (;;) { 
      final int result = sNextGeneratedId.get(); 
      // aapt-generated IDs have the high byte nonzero; clamp to the range under that. 
      int newValue = result + 1; 
      if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. 
      if (sNextGeneratedId.compareAndSet(result, newValue)) { 
       return result; 
      } 
     } 
    } 
} 

我想向你展示它为什么不工作: 当您创建视图这样Button tv = new Button(getApplicationContext());如果调用tv.getId()将等于-1,直到你打电话tv.setId(int id)。

+0

非常感谢! :) – Richard 2015-04-05 21:16:26

+0

不客气,但你必须阅读关于GridView和TableLayout – 2015-04-05 21:18:47

+0

哇,实际上有一个小问题。当视图被添加时,它们会彼此相加。请看看这个问题,我已经展示了他们需要如何添加(网格)。如果可能,你可以做一些调整吗? – Richard 2015-04-05 21:19:50