Android动态生成按钮

这是我的第一篇博客,很遗憾,并不是都是我写的,部分来自某位前辈。若下次遇见前辈,将将前辈的链接发在下面。

目的:在MainActivity动态生成16个按钮。点击每一个按钮,将有页面跳转。

代码:MainActivity

package com.example.record_imag;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;


public class MainActivity extends Activity {


int width;
int height;
RelativeLayout layout;
Button Btn[] ;
Button bt_start;
int i=0;
int j=-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

bt_start=(Button) findViewById(R.id.bt_start);

//获取屏幕大小,以合理设定 按钮 大小及位置
 DisplayMetrics dm = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(dm);
 width = dm.widthPixels;
 height = dm.heightPixels;


//自定义layout组件
 layout = (RelativeLayout) findViewById(R.id.rl);        


//这里创建16个按钮,每行放置4个按钮
 Btn = new Button[16];
 
 bt_start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(i<16){
       Btn[i]=new Button(MainActivity.this);
       Btn[i].setId(2000+i); 
       Btn[i].setText("按钮"+i);   
       RelativeLayout.LayoutParams btParams = new RelativeLayout.LayoutParams ((width-50)/4,80);  //设置按钮的宽度和高度
       if (i%4 == 0) {
        j++;
       }
       btParams.leftMargin = 10+ ((width-50)/4+10)*(i%4);   //横坐标定位        
       btParams.topMargin = 20 + 55*j;   //纵坐标定位       
       layout.addView(Btn[i],btParams);   //将按钮放入layout组件
 


 for (int k = 0; k <= i; k++) { 
  //这里不需要findId,因为创建的时候已经确定哪个按钮对应哪个Id
  Btn[k].setTag(k);                //为按钮设置一个标记,来确认是按下了哪一个按钮


  Btn[k].setOnClickListener(new OnClickListener() {
   @Override
       public void onClick(View v) {
           int i = (Integer) v.getTag();   //这里的i不能在外部定义


           Intent intent = new Intent();
           intent.setClass(MainActivity.this, Others.class);
           Bundle bundle = new Bundle();
           bundle.putInt("count", i);
           intent.putExtras(bundle);
           startActivity(intent);
           MainActivity.this.finish();                   
      }
    });
 }
 i++;
}else{
Toast.makeText(MainActivity.this, "too many", Toast.LENGTH_SHORT);
}
}

});
 
}


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


@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

}


Others也是一个Activity,代码如下:

package com.example.record_imag;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;


public class Others extends Activity{

TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.others);

tv=(TextView) findViewById(R.id.tv_test);
Bundle b=getIntent().getExtras();
int i=b.getInt("count");

tv.setText("this is "+i);
}

}

activity_main是MainActivity的布局xml,代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.record_imag.MainActivity" 
    android:id="@+id/rl">


    <Button 
        android:id="@+id/bt_start"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="start"
        android:layout_alignParentBottom="true"/>


</RelativeLayout>

others是Others这个Activity的xml布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/tv_test"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:text="test"/>


</LinearLayout>

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值