Android:很好地对齐很多按钮

时间:2012-07-31 22:43:35

标签: android button relativelayout

我有一个带有12个按钮的RelativeLayout,我想在屏幕中央很好地对齐它们,并且彼此之间的距离相等,左右边距相等(如计算器按钮或电话按钮)。我所做的是在这个XML文件和pic中的结果,但它仍然不完美。你们有更好的解决方案吗?

enter image description here

 <RelativeLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/tabview1">
    <TextView
        android:id="@+id/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="www.fasttest.me" 
        android:textColor="@android:color/white"/>

    <Button
        android:id="@+id/ql0"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="100dp"
        android:layout_marginLeft="10dp"
        android:text="b0" />
   <Button
        android:id="@+id/ql1"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="100dp"
        android:layout_marginLeft="80dp"
        android:text="b1" />
   <Button
        android:id="@+id/ql2"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="100dp"
        android:layout_marginLeft="150dp"
        android:text="b2" />
    <Button
        android:id="@+id/ql3"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="100dp"
       android:layout_marginLeft="220dp"
        android:text="b3" />
    <Button
        android:id="@+id/ql4"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="180dp"
        android:layout_marginLeft="10dp"
        android:text="b4" />
   <Button
        android:id="@+id/ql5"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="180dp"
        android:layout_marginLeft="80dp"
        android:text="b5" />
   <Button
        android:id="@+id/ql6"
         android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="180dp"
        android:layout_marginLeft="150dp"
        android:text="b6" />
    <Button
        android:id="@+id/ql7"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="180dp"
        android:layout_marginLeft="220dp"
        android:text="b7" />
   <Button
        android:id="@+id/ql8"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="260dp"
       android:layout_marginLeft="10dp"
        android:text="b8" />
   <Button
        android:id="@+id/ql9"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="260dp"
        android:layout_marginLeft="80dp"
        android:text="b9" />
   <Button
        android:id="@+id/ql10"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="260dp"
       android:layout_marginLeft="150dp"
        android:text="b10" />
    <Button
        android:id="@+id/ql11"
        android:layout_width="@dimen/qlbutton_width"
        android:layout_height="@dimen/qlbutton_height"
        android:layout_marginTop="260dp"
       android:layout_marginLeft="2dp"
        android:text="b11" />
   </RelativeLayout>

3 个答案:

答案 0 :(得分:3)

我建议你在GridView中使用按钮。给每个按钮相同的重量,使其伸展自己:

<Button
    android:id="@+id/ql3"
    android:layout_height="@dime/button_height"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:padding="@dimen/buttons_padding"
    android:text="b3" />

答案 1 :(得分:1)

您可以使用Romain Guy的这个自定义GridLayout。指定行数和列数。屏幕将被分成相同大小的单元格。

以下是link

答案 2 :(得分:0)

我终于完成了一个按钮网格视图。这是代码:

public class MainActivity extends Activity {
    public String[] filenames ={"B1","B2","B3","B4","B5","B6"};        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);           
        GridView gridView = (GridView) findViewById(R.id.gridview);
        gridView.setAdapter(new ButtonAdapter(this));  
        gridView.setOnItemClickListener(new OnItemClickListener(){
            public void onItemClick(AdapterView<?> parent, 
            View v, int position, long id){                
                Toast.makeText(getBaseContext(), 
                        "pic" + (position + 1) + " selected", 
                        Toast.LENGTH_SHORT).show();
            }
        });        
    }

    public class ButtonAdapter extends BaseAdapter {
        private Context context;    
        public ButtonAdapter(Context c){
            context = c;
        }
        public int getCount() {
            return filenames.length;
        }
        public Object getItem(int position) {
            return position;
        }     
        public long getItemId(int position) {
            return position;
        }
        public View getView(int position, View convertView, ViewGroup parent){
              Button btn;  
                 if (convertView == null) {   
                  btn = new Button(context);  
                  btn.setLayoutParams(new GridView.LayoutParams(100, 100));  
                  btn.setPadding(8, 8, 8, 8);  
                  btn.setFOcusable(false);
                  btn.setClickable(false);
                  }else {  
                  btn = (Button) convertView;  
                 }               
                 btn.setText(filenames[position]);    
                 btn.setTextColor(Color.WHITE);  
                 btn.setId(position);       
                 return btn; 
        }
    }    
}