1. 程式人生 > >Android按鈕實現的兩種方法

Android按鈕實現的兩種方法

剛接觸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遊戲程式設計之從零開始》裡面已經說得很清楚了,於是把裡面的程式碼給拿到這裡了~~


pdf:《Android遊戲程式設計之從零開始》