android上改變listView的選中顏色


需要說明的是,在正常默認情況下都是選擇Item橙黃色,點擊Item橙黃色,但是如果你設置了Item整體布局的背景色 android:background="#000000"則,你的上面兩個都會不起作用,導致你selected了Item看不出來是否選擇了。

 

那如何改橙黃色為綠色呢?????

step1:list_item.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="45dp"
    android:orientation="vertical"
    android:background="@drawable/list_item_bg"
     >
   <RelativeLayout 
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:gravity="center_vertical"
       
       >
       <TextView 
          .....
           />
       <ImageView 
           ....
           />
   </RelativeLayout>
</LinearLayout>

 

============================================

drawable下的 list_item_bg.xml中的代碼:

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_selected="true" 
        android:drawable="@color/blue" /> 
  <item android:state_focused="true" 
        android:drawable="@color/blue" />
</selector> 

step2:

list.setOnItemClickListener(new OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                   
                    arg1.setBackgroundResource(R.color.blue);  // 注意是這個方法o
                    .......
                }});
        }

 

注意:當完成第二步之后,再運行程序會發現有個小小的問題,當你點擊item時,選中的顏色會先是默認的橙黃色,然后變成設置的綠色。所以我們需要進行step3。

step3:在myList.xml中的 ListView設置:

 android:listSelector="@android:color/transparent"   // 將選中的默認設置為透明色

等同於: android:listSelector="#00000000"  

 

這樣就ok了

 

還有其他方法

 

ListView選中時默認是黃色,很多時候會和我們軟件的配色不符合,那么我就教你如何修改默認的ListView配色,改變ListView選中顏色有兩個方法:

1. 在程序中:

Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. Drawable drawable=getResources().getDrawable(R.drawable.touch_feedback);  
  2. ListView.setSelector(drawable);  




2. 在xml里面的ListView標簽下添加:

Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. android:listSelector=”#00000000″ //后面的顏色可以自己定這樣寫是透明的  




記錄和恢復ListView滾動的位置
有時候我們需要記錄當前ListView滾動到的位置,重新加載的時候要回到原位,不羅嗦,給出代碼:

Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. //列表滾動  
  2. private OnScrollListener ScrollLis = new OnScrollListener() {  
  3.    
  4.     @Override  
  5.     public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {  
  6.     }  
  7.    
  8.     @Override  
  9.     public void onScrollStateChanged(AbsListView view, int scrollState) {  
  10.         if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){  
  11.                     ListPos=list.getFirstVisiblePosition();  //ListPos記錄當前可見的List頂端的一行的位置  
  12.             }  
  13.     }  
  14. };  




接下來就是還原位置,放在ListView加載之后:


Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. list.setSelection(ListPos);  




關於android ListView的美化

用心的朋友應該會發現,listview中在設置了背景之后。會有些問題。
1.、listview在拖動的時候背景圖片消失變成黑色背景。等到拖動完畢我們自己的背景圖片才顯示出來。
2 、listview的上邊和下邊有黑色的陰影。
3、lsitview的每一項之間需要設置一個圖片做為間隔。
針對以上問題 在listview的xml文件中設置一下語句。



問題1 有如下代碼結解決 android:scrollingCache=”false” 或 android:cacheColorHint=”#00000000″
問題2 用如下代碼解決:android:fadingEdge=”none”
問題3 用如下代碼解決: android:divider=”@drawable/list_driver” 其中 @drawable/list_driver 是一個圖片資源




ListView拖動時背景黑色的問題

我們知道在Android中ListView是一個比較常用的UI控件,我們在大部分開發中都需要用到它,因此Android為我們提供了 ListView的多種實現方法,通過自定義顯示布局讓顯示的內容更加美觀,但是我們會發現這樣一個問題,當我們操作ListView的時候,如果不使用手機上下按鍵的時候,直接用觸摸拖動視圖的方式,會發現ListView的背景一片黑色,而且所有被選中的文字都變成一片漆黑。

其實這個問題發生的原因在於ListView存在緩存顏色機制,因此我們可以通過設定緩存顏色為透明的方法來解決這個問題。ATAAW.COM提供兩個解決方法供大家使用,如下所示:

A、通過布局屬性來設定(ListView的屬性中直接定義)

android:cacheColorHint=”#00000000″

B、在代碼中直接設定

listView.setCacheColorHint(Color.TRANSPARENT);

這樣就可以解決黑色出現的問題了。


ListView 中添加按鈕,動態刪除添加ItemView的操作

要實現添加按鈕的操作,必須自定義Adapter,使用Button View的setTag()方法,將Button所屬的位置設置到tag當中
要實現動態添加刪除ItemView的操作,必須首先調整調整Adapter所綁定的數據源,然后調用Adapter的notifyDataSetChanged()方法

以下為實現的一個實例

Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. package com.jason.joysmsyd;  
  2.    
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.    
  8. import android.app.ListActivity;  
  9. import android.content.Intent;  
  10. import android.os.Bundle;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.view.Window;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.BaseAdapter;  
  17. import android.widget.Button;  
  18. import android.widget.EditText;  
  19. import android.widget.TextView;  
  20.    
  21. public class SendMain extends ListActivity implements OnClickListener{  
  22.    
  23.     Button buttonMessage,buttonContact,buttonHistory;  
  24.     EditText textMessage;  
  25.    
  26.     List<Map<String,String>> contacts = new ArrayList<Map<String,String>>();  
  27.    
  28.    
  29.    
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         // TODO Auto-generated method stub  
  33.         super.onCreate(savedInstanceState);  
  34.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  35.    
  36.         this.setContentView(R.layout.layout_send);  
  37.    
  38.         buttonMessage = (Button) this.findViewById(R.id.ButtonMessage);  
  39.         buttonContact = (Button) this.findViewById(R.id.ButtonContact);  
  40.         buttonHistory = (Button) this.findViewById(R.id.ButtonHistory);  
  41.    
  42.         textMessage = (EditText)this.findViewById(R.id.EditTextMessage);  
  43.         textMessage.setText(this.getIntent().getExtras().getString("message"));  
  44.    
  45.     }  
  46.    
  47.     public void onClick(View v) {  
  48.         // TODO Auto-generated method stub  
  49.         switch(v.getId()){  
  50.         case R.id.ButtonMessage:  
  51.             this.finish();  
  52.             break;  
  53.         case R.id.ButtonContact:  
  54.         {  
  55.             Intent intent = new Intent();  
  56.             intent.setAction("com.jason.action.contact");  
  57.             this.startActivityForResult(intent, 0);  
  58.         }  
  59.             break;  
  60.         case R.id.ButtonHistory:  
  61.         {  
  62.             Intent intent = new Intent();  
  63.             intent.setAction("com.jason.action.history");  
  64.             this.startActivityForResult(intent, 1);  
  65.         }  
  66.             break;  
  67.         }  
  68.    
  69.     }  
  70.    
  71.    
  72.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  73.         // TODO Auto-generated method stub  
  74.         super.onActivityResult(requestCode, resultCode, data);  
  75.          if (requestCode == 0 && resultCode == RESULT_OK) {  
  76.             this.getcontactFromString(data.getExtras().getString(  
  77.                     UserSelectActivity.RETURN_LIST));  
  78.             bindDataToList();  
  79.         }  
  80.     }  
  81.    
  82.     private void getcontactFromString(String data) {  
  83.         if (data == null || data.length() == 0) {  
  84.             return;  
  85.         }  
  86.    
  87.    
  88.         String[] arrayContact = data.split("#");  
  89.         for (String singleContact : arrayContact) {  
  90.             if (singleContact != null && singleContact.length() > 0) {  
  91.                 String[] props = singleContact.split(":");  
  92.                 if (props.length == 2) {  
  93.                     Map<String,String> contact = new HashMap<String,String>();  
  94.                     contact.put("name", props[0]);  
  95.                     contact.put("phone", props[1]);  
  96.                     contacts.add(contact);  
  97.    
  98.                 }  
  99.             }  
  100.    
  101.         }  
  102.    
  103.     }  
  104.    
  105.     private void bindDataToList(){  
  106.         this.setListAdapter(new MyAdapter());  
  107.     }  
  108.    
  109.     public class MyAdapter extends BaseAdapter{  
  110.    
  111.         public int getCount() {  
  112.             // TODO Auto-generated method stub  
  113.             return contacts.size();  
  114.         }  
  115.    
  116.         public Object getItem(int position) {  
  117.             // TODO Auto-generated method stub  
  118.             return contacts.get(position);  
  119.         }  
  120.    
  121.         public long getItemId(int position) {  
  122.             // TODO Auto-generated method stub  
  123.             return position;  
  124.         }  
  125.    
  126.    
  127.         public View getView(int position, View convertView, ViewGroup parent) {  
  128.             // TODO Auto-generated method stub  
  129.             LayoutInflater inflater = SendMain.this.getLayoutInflater();  
  130.              final View view = inflater.inflate(R.layout.layout_user_item, null);  
  131.              final TextView textPhone = (TextView) view.findViewById(R.id.text1);  
  132.              final TextView textName = (TextView) view.findViewById(R.id.text2);  
  133.              Button button = (Button)view.findViewById(R.id.buttonDelete);  
  134.    
  135.              textPhone.setText(contacts.get(position).get("phone"));  
  136.              textName.setText(contacts.get(position).get("name"));  
  137.    
  138.              button.setTag( position);  
  139.    
  140.              button.setOnClickListener(new OnClickListener(){  
  141.    
  142.                 public void onClick(View v) {  
  143.                     // TODO Auto-generated method stub  
  144.                     int position = Integer.parseInt(v.getTag().toString());  
  145.                     contacts.remove(position);  
  146.                     MyAdapter.this.notifyDataSetChanged();  
  147.    
  148. //                  SendMain.this.getListView().refreshDrawableState();  
  149.                 }});  
  150.    
  151.    
  152.    
  153.    
  154.             return view;  
  155.         }  
  156.    
  157.     }  
  158. }  




Android ListView 清單與其Trigger 觸發事件

Android ListView 清單與其選擇時的觸發事件,

可以參考下面的程式范例 :

Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. public class helloWorld extends Activity {  
  2.    
  3.     String[] vData = null;  
  4.    
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.    
  8.         // 要做為ArrayAdapter的資料來源  
  9.         vData = new String[]{"足球","棒球","籃球"};  
  10.    
  11.         // 建立"陣列接收器"  
  12.         ArrayAdapter<String>  arrayData = new ArrayAdapter<String>(  
  13.                 this  
  14.                 , android.R.layout.simple_list_item_1  
  15.                 , vData  
  16.                 );  
  17.    
  18.         // 建立ListView 物件  
  19.         ListView  lv = new ListView(this);  
  20.    
  21.         // 設定ListView 的接收器, 做為選項的來源  
  22.         lv . setAdapter ( arrayData );  
  23.    
  24.         // ListView 設定Trigger  
  25.         lv . setOnItemClickListener ( new OnItemClickListener() {  
  26.    
  27.             public void onItemClick (AdapterView<?> arg0, View arg1, int arg2,  
  28.                     long arg3) {  
  29.                 // TODO Auto-generated method stub  
  30.                 setTitle( getResources().getString(R.string.app_name) + ": " + vData [ arg2 ]);  
  31.             }  
  32.         });  
  33.    
  34.         // 設定ListView 為ContentView  
  35.         setContentView(lv);  
  36.     }  
  37. }  


android上改變listView的選中顏色 <wbr>(轉) 
android上改變listView的選中顏色 <wbr>(轉) 
android上改變listView的選中顏色 <wbr>(轉) 


Android中的ListView內容刷新問題

最近在學習Android的listView控件時遇到了一個問題,如何添加一個Item到ListView中並及時的刷新出來。在網上查了很多帖子,很多人在問,也很多人在解答,但是總的來說都沒找到詳細的解決方案。對於ListView與數據庫的同步,高手們建議使用 ContentProvider對象。但是如果我不使用數據庫呢?也有人回答用notifyDataSetChanged()方法。這倒是一個正確的解決方案,但是對於新手來說,還是比較困惑怎么去用,這里我貼一下我的用法:

Java代碼   收藏代碼android上改變listView的選中顏色 <wbr>(轉)
  1. OnClickListener listener2 = new OnClickListener() {  
  2.         @Override  
  3.         public void onClick(View v) {  
  4.             // TODO Auto-generated method stub  
  5.             Map<String, Object> m = new HashMap<String, Object>();  
  6.             String tiString  = tv.getText().toString(); // 注意這里我為什么要取出這個EditText的內容  
  7.             m.put("prod_na", tiString); // 而不這樣寫 m.put("prod_na", tv.getText());  
  8.             m.put("prod_type", tiString); // 因為tv.getText()返回的是Editable對象,真正的數據是被緩存的,  
  9.                                           // 也就是說你后續的EditText改動都會影響之前添加的Item  
  10.             coll.add(m);  
  11.    
  12.             // 取回Adapter對象,用於調用notifyDataSetChanged方法。  
  13.             SimpleAdapter sAdapter = (SimpleAdapter)lv.getAdapter();  
  14.             sAdapter.notifyDataSetChanged();  
  15.         }  
  16.     };  



這里涉及到了Android中的MVC模式概念,如何存儲數據,控制和顯示。

你可以認為ListView是一個View,那么mode是什么呢?顯然是SimpleAdapter對象,而Control又是什么呢?那只能是notifyDataSetChanged()了。當數據變化時,也就是SimpleAdapter所處理的數據變化了,那么我們就需要調用 notifyDataSetChanged 去通知View作出改變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM