Android按钮实现的两种方法
2014-02-24 10:52
274 查看
刚接触Android开发,第一篇博客,也就当做笔记吧,
这里先说一个问题,在很多Android开发书中可能是版本太早的问题,都说res/layout下有一个main.xml文件中放着排版信息,但是个人在实际中见到的是res/menu下是main.xml中只有少量其他信息,而res/layout下是activity_main.xml中才是对应于某些书中的main.xml。以下的.xml中都默认为res/layout下的activity_main.xml文件。
方法1:在xml文件中声明onClick,在.java中实现其方法
.xml
.java
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
//import的太多记不住的话可以先写下面的代码然后按Ctrl+shift+o自动选择添加!!
public class MainActivity extends Activity{
/* private Button btn_ok;
方法1不用实例化,所以不用写*/ private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
/* btn_ok=(Button)findViewById(R.id.btn_ok);
btn_cancel=(Button)findViewById(R.id.btn_cancel);方法1不用实例化,所以不用写*/
}
public void onOkButton(View v){
Toast.makeText(this, "Button ok clicked", Toast.LENGTH_SHORT).show();
tv.setText("okokok");
} //这是重点!!!
@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;
}
}
注意,在Java中不用声明private Button以及实例化,只要写上.xml中声明的相应方法就OK
方法2:
.xml
.java
总结:个人不太清楚两种方法对程序的速度以及影响,但是方法1的可读性更强,方法2的编程规则更好,注意,各自在import和.xml以及MainActivity的变量声明和onCreate()都存在不同~就实现结果来说没什么区别吧~
补充,把方法1 的给补充上吧,
package com.himi.button;//包路径
//import导入类库
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/* 使用点击监听器接口进行监听
public class MainActivity extends Activity implements OnClickListener {//使用点击监听器
private Button btn_ok, btn_cancel;
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_ok = (Button) findViewById(R.id.btn_ok);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
tv = (TextView) findViewById(R.id.tv);
btn_ok.setOnClickListener(this);//将btn_ok按钮绑定在点击监听器上
btn_cancel.setOnClickListener(this);//将btn_cancel按钮绑定在点击监听器上
}
@Override
public void onClick(View v) {//使用监听器就要重写其抽象函数
if (v == btn_ok) {
tv.setText("确定按钮触发事件!");
} else if (v == btn_cancel) {
tv.setText("取消按钮触发事件!");
}
}
}
*/
//内部类实现按键监听
public class MainActivity extends Activity {//使用点击监听器
private Button btn_ok, btn_cancel;
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_ok = (Button) findViewById(R.id.btn_ok);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
tv = (TextView) findViewById(R.id.tv);
btn_ok.setOnClickListener(new OnClickListener() {//将btn_ok按钮绑定在点击监听器上
@Override
public void onClick(View v) {
tv.setText("确定按钮触发事件!");
}
});
btn_cancel.setOnClickListener(new OnClickListener() {//将btn_cancel按钮绑定在点击监听器上
@Override
public void onClick(View v) {
tv.setText("取消按钮触发事件!");
}
});
}
}
请仔细看上面一段代码,其实里面包含两种方法,分别是监听器实现和内部类实现,我到了后来才明白原来《Android游戏编程之从零开始》里面已经说得很清楚了,于是把里面的代码给拿到这里了~~
参考资料:http://blog.csdn.net/pfgmylove/article/details/6759447
http://blog.sina.com.cn/s/blog_4ba5666e010178um.html
pdf:《Android游戏编程之从零开始》
这里先说一个问题,在很多Android开发书中可能是版本太早的问题,都说res/layout下有一个main.xml文件中放着排版信息,但是个人在实际中见到的是res/menu下是main.xml中只有少量其他信息,而res/layout下是activity_main.xml中才是对应于某些书中的main.xml。以下的.xml中都默认为res/layout下的activity_main.xml文件。
方法1:在xml文件中声明onClick,在.java中实现其方法
.xml
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btn_ok" android:id="@id/btn_ok" android:onClick="onOkButton" //在这里写上!! />
.java
package com.example.helloandroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
//import的太多记不住的话可以先写下面的代码然后按Ctrl+shift+o自动选择添加!!
public class MainActivity extends Activity{
/* private Button btn_ok;
方法1不用实例化,所以不用写*/ private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
/* btn_ok=(Button)findViewById(R.id.btn_ok);
btn_cancel=(Button)findViewById(R.id.btn_cancel);方法1不用实例化,所以不用写*/
}
public void onOkButton(View v){
Toast.makeText(this, "Button ok clicked", Toast.LENGTH_SHORT).show();
tv.setText("okokok");
} //这是重点!!!
@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;
}
}
注意,在Java中不用声明private Button以及实例化,只要写上.xml中声明的相应方法就OK
方法2:
.xml
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btn_ok" android:id="@id/btn_ok" //这里没有onClick事件 />
.java
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; //!! import android.widget.Button; //!! import android.widget.TextView; public class MainActivity extends Activity{ private Button btn_ok; //需要实例化!! private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv=(TextView)findViewById(R.id.tv); btn_ok=(Button)findViewById(R.id.btn_ok); //需要实例化!! btn_ok.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0){ tv.setText("ok button pressed"); } }); //setOnClickListenr中是new的OnClickListener方法,后者中要包含onClick事件 } @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; } }其中,对于方法1,http://blog.csdn.net/pfgmylove/article/details/6759447中分出两种方法,感兴趣的同学可以去看一下。
总结:个人不太清楚两种方法对程序的速度以及影响,但是方法1的可读性更强,方法2的编程规则更好,注意,各自在import和.xml以及MainActivity的变量声明和onCreate()都存在不同~就实现结果来说没什么区别吧~
补充,把方法1 的给补充上吧,
package com.himi.button;//包路径
//import导入类库
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/* 使用点击监听器接口进行监听
public class MainActivity extends Activity implements OnClickListener {//使用点击监听器
private Button btn_ok, btn_cancel;
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_ok = (Button) findViewById(R.id.btn_ok);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
tv = (TextView) findViewById(R.id.tv);
btn_ok.setOnClickListener(this);//将btn_ok按钮绑定在点击监听器上
btn_cancel.setOnClickListener(this);//将btn_cancel按钮绑定在点击监听器上
}
@Override
public void onClick(View v) {//使用监听器就要重写其抽象函数
if (v == btn_ok) {
tv.setText("确定按钮触发事件!");
} else if (v == btn_cancel) {
tv.setText("取消按钮触发事件!");
}
}
}
*/
//内部类实现按键监听
public class MainActivity extends Activity {//使用点击监听器
private Button btn_ok, btn_cancel;
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_ok = (Button) findViewById(R.id.btn_ok);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
tv = (TextView) findViewById(R.id.tv);
btn_ok.setOnClickListener(new OnClickListener() {//将btn_ok按钮绑定在点击监听器上
@Override
public void onClick(View v) {
tv.setText("确定按钮触发事件!");
}
});
btn_cancel.setOnClickListener(new OnClickListener() {//将btn_cancel按钮绑定在点击监听器上
@Override
public void onClick(View v) {
tv.setText("取消按钮触发事件!");
}
});
}
}
请仔细看上面一段代码,其实里面包含两种方法,分别是监听器实现和内部类实现,我到了后来才明白原来《Android游戏编程之从零开始》里面已经说得很清楚了,于是把里面的代码给拿到这里了~~
参考资料:http://blog.csdn.net/pfgmylove/article/details/6759447
http://blog.sina.com.cn/s/blog_4ba5666e010178um.html
pdf:《Android游戏编程之从零开始》
相关文章推荐
- Android 按钮效果的两种实现方法
- Android悬浮按钮的两种实现方法(Floating action button)
- android 用户界面笔记之Button和ImageButton实现按钮响应事件两种方法
- android悬浮按钮(Floating action button)的两种实现方法
- 14 Android android 按钮效果的两种实现方法
- Android 按钮效果的两种实现方法
- [Android]实现静默安装APK的两种方法
- Android 通知Notification的两种实现方法
- 利用CBitmapButton类实现位图按钮的两种方法
- repeater删除按钮的两种实现方法
- android带有文字的图片按钮的两种实现方式
- Android 截取手机屏幕两种实现方法
- android 实现全屏的两种方法
- 利用CBitmapButton类实现位图按钮的两种方法
- android menu的两种实现方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- 【Android】实现Activity页面暂停几秒后跳转的两种方法
- [Android]实现静默安装APK的两种方法
- Android 实现圆圈扩散水波动画效果两种方法