Android按鈕實現的兩種方法
阿新 • • 發佈:2019-02-01
剛接觸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" //在這裡寫上!! />
<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遊戲程式設計之從零開始》裡面已經說得很清楚了,於是把裡面的程式碼給拿到這裡了~~
pdf:《Android遊戲程式設計之從零開始》