【android基礎知識】【selector】【自定義控件】

項目demo源碼:http://download.csdn.net/detail/mcdullsin/8291231java


雖然本身仍是一個學的比較多的新人,可是真心但願全部博客都附上源碼,像我這類人也能縮短學習路程。android

效果:ide

好了,首先來看一下圖片選擇器selector。佈局

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>

使用selector的組件:this

<cn.com.karl.view.ImageBtn
        android:id="@+id/btn_right"
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:background="@drawable/btn" 
        />

將其當成靜態圖片就能夠了。spa

這個selector定義了四種狀態下的按鈕圖片背景,即:未得到焦點未點擊、得到焦點未點擊、點擊、選中。不一樣狀態下圖片背景也不一樣。使用selector最好有一個初始圖片。我這個是針對按鈕說的,有可能listview有不一樣?沒進行過下一步試驗。.net

 

關於selector和shape很是不錯的一篇博文:http://blog.csdn.net/tianjf0514/article/details/7492876code

 

2、自定義控件orm

   一、 首先定義一個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:layout_marginLeft="8dp"
        android:paddingTop="5dip" />
 
    <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:layout_marginRight="8dp"
        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 stub
       LayoutInflater 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); 
   } 

}

在上面的代碼中重要的是:

LayoutInflater 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);

以後再主佈局文件中引用並在activity中找到它們,添加事件。

主佈局文件:

<?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>

java文件:

public class MainActivity extends Activity {
  private ImageBtn imageBtn1;
  private ImageBtn imageBtn2;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       // TODO Auto-generated method stub
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
        
       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 stub
               Toast.makeText(getApplicationContext(), "點擊的正確按鈕", 1).show();
           }
       });
        
       imageBtn2.setOnClickListener(new View.OnClickListener() {
            
           public void onClick(View v) {
               // TODO Auto-generated method stub
               Toast.makeText(getApplicationContext(), "點擊的錯誤按鈕", 1).show();
           }
       });
   }
}
相關文章
相關標籤/搜索