很多時候android常用的控制項不能滿足我們的需求,那麼我們就需要自訂一個控制項了。今天做了一個自訂控制項的執行個體,來分享下。
首先定義一個layout實現按鈕內部布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingBottom="5dip" android:paddingLeft="40dip" android:paddingTop="5dip" android:src="@drawable/right_icon" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="8dip" android:text="確定" android:textColor="#000000" /></LinearLayout>
接下來寫一個類繼承LinearLayout,匯入剛剛的布局,並且設定需要的方法,從而使的能在代碼中控制這個自訂控制項內容的顯示。
public class ImageBtn extends LinearLayout {private ImageView imageView;private TextView textView;public ImageBtn(Context context) {super(context);// TODO Auto-generated constructor stub}public ImageBtn(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubLayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);inflater.inflate(R.layout.imagebtn, this);imageView=(ImageView) findViewById(R.id.imageView1);textView=(TextView)findViewById(R.id.textView1);}/** * 設定圖片資源 */ public void setImageResource(int resId) { imageView.setImageResource(resId); } /** * 設定顯示的文字 */ public void setTextViewText(String text) { textView.setText(text); } }
在需要使用這個自訂控制項的layout中加入這控制項,只需要在xml中加入即可。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <cn.com.karl.view.ImageBtn android:id="@+id/btn_right" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/btn" /> <cn.com.karl.view.ImageBtn android:id="@+id/btn_error" android:layout_marginLeft="5dp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/btn" /></LinearLayout>
這裡用到了背景圖片 在drawable/btn.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/btn_normal"></item> <item android:state_pressed="true" android:drawable="@drawable/btn_white"></item> <item android:state_checked="true" android:drawable="@drawable/btn_white"></item> <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/btn_normal"></item> </selector>
最後在activity中設定該控制項,和其他控制項差不多:
public class IdentifyButtonActivity extends Activity { private ImageBtn imageBtn1; private ImageBtn imageBtn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.identifybutton);imageBtn1=(ImageBtn) this.findViewById(R.id.btn_right);imageBtn2=(ImageBtn) this.findViewById(R.id.btn_error);imageBtn1.setTextViewText("確定");imageBtn2.setTextViewText("取消");imageBtn1.setImageResource(R.drawable.right_icon);imageBtn2.setImageResource(R.drawable.error_icon);imageBtn1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubToast.makeText(getApplicationContext(), "點擊的正確按鈕", 1).show();}}); imageBtn2.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubToast.makeText(getApplicationContext(), "點擊的錯誤按鈕", 1).show();}});}}
最後看看我們自訂控制項的效果吧!
點擊後還有按下按鈕的效果。