您的位置:首页 > 移动开发 > Android开发

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

<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开发 按钮