閱讀739 返回首頁    go 汽車大全


android中設置控件獲得焦點

android中,要使控件獲得焦點,需要先setFocus,再requestFocus。

以Button為例:
                btn.setFocusable(true);
                btn.setFocusableInTouchMode(true);
                btn.requestFocus();
                btn.requestFocusFromTouch();

//獲得失去焦點的監聽器

btn.setOnFocusChangeListener(new OnFocusChangeListener() {
  
  @Override
  public void onFocusChange(View v, boolean hasFocus) {
   // TODO Auto-generated method stub
   if (hasFocus) {
    btn_box.setBackgroundResource(R.drawable.book_green);
   }else {
    btn_box.setBackgroundResource(R.drawable.book);
   }   
  }
 });

1. 背景色:       listView設置背景色android:background="@drawable/bg",拖動或者點擊list空白位置的時候發現ListItem都變成黑色。 因為默認的ListItem背景是透明的,而ListView的背景是固定不變的,所以在滾動條滾動的過程中如果實時地去將當前每個Item的顯示內容跟背景進行混合運算,所以android係統為了優化這個過程用,就使用了一個叫做android:cacheColorHint的屬性,在黑色主題下默認的顏色值是#191919,所以就出現了剛才的畫麵,有一半是黑色的。

 如果你隻是換背景的顏色的話,可以直接指定android:cacheColorHint為你所要的顏色;如果你是用圖片做背景的話,那也隻要將android:cacheColorHint指定為透明(#00000000)就可以了,當然為了美化是要犧牲一些效率的。 

2. android:fadingEdge="none"   去掉上邊和下邊黑色的陰影

3. android:divider="@drawable/list_driver"     其中 @drawable/list_driver 是一個圖片資源lsitview的每一項之間需要設置一個圖片做為間隔 

設置Item之間無間隙

android:divider="#00000000" 或者在javaCode中如下定義:listView.setDividerHeight(0);

 4. android:listSelector="@color/pink" listView item 選中時的顏色。默認為橙黃底色。

 5. android:divider="@drawable/list_driver" 設置分割線的圖片資源,如果則隻要設置為

     android:divider="@drawable/@null" 不想顯示分割線

 

 6. android:scrollbars="none"   setVerticalScrollBarEnabled(true);  隱藏listView的滾動條

 7. android:fadeScrollbars="true"  設置為true就可以實現滾動條的自動隱藏和顯示

 8. android:transcriptMode="alwaysScroll"  用ListView或者其它顯示大量Items的控件實時跟蹤或者查看信息,希望最新的條目可以自動滾動到可視範圍內。通過設置的控件transcriptMode屬性可以將Android平台的控件(支持ScrollBar)自動滑動到最底部。

        android:fastScrollEnabled="false"
        android:fastScrollEnabled = "true"  加快滑動速度

    android:drawSelectorOnTop="false" 
    android:scrollingCache="false"  ??????????????

 

android:drawSelectorOnTop="true" 點擊某一條記錄,顏色會顯示在最上麵,記錄上的文字被遮住,所以點擊文字不放,文字就看不到

android:drawSelectorOnTop="false" 點擊某條記錄不放,顏色會在記錄的後麵,成為背景色,但是記錄內容的文字是可見的

When set to true, the selector will be drawn over the selected item. Otherwise the selector is drawn behind the selected item. The default value is false.


 9.在ListView中添加屬性:
android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track" android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb"
scrollbar_vertical_track,crollbar_vertical_thumb自定義的xml文件,放在Drawable中,track是指長條,thumb是指短條,然後再xml中定義短條和長條的樣式


  在項目的開發過程中,需要Listview的Item中包含按鈕的效果。在實際開發過,Item中放置按鈕後,ListView 單行選擇背景顏色變化的效果沒有了。

 

問題原因

    ListView 和 其它能觸發點擊事件的widget無法一起正常工作的原因是加入其它widget後,ListView的itemclick事件將無法觸發,被其它widget的click事件屏蔽。

 

目前網絡上普遍的解決方式

設置1  在Item的xml模板中設置 根布局 屬性

 android:descendantFocusability= "blocksDescendants"

 

如下:

< RelativeLayout>

android:descendantFocusability= "blocksDescendants"

 

設置2 在按鈕控件<ImageButton>中設置屬性

 

android:focusable = "false"

補充:這種設置後,點擊按鈕,整條Item都響應點擊效果,顯示的效果非我們需要的

 

我們的需要的效果

1 ListView的Item本身可以選擇

2 Item中的按鈕可以隨意點擊,不會幹擾Item

 

實現的過程

 在ListView中用圖片控件,或者文本控件,來代替圖片按鈕和普通按鈕,並在Adapter中設置點擊事件就可以

 如例:

 

//根據數據項,設置點擊文本框的文字,並設置點擊事件        TextView txt_Remember=(TextView)convertView.findViewById(R.id.txt_Remember);                txt_Remember.setOnClickListener(new  TextView.OnClickListener()        {            public void onClick(View v){                LibListViewAdapter.this.remove(LibListViewAdapter.this.getItem(1));                            }        });

最後更新:2017-04-04 07:03:44

  上一篇:go uva 141 The Spot Game hash
  下一篇:go zoj 2750 Idiomatic Phrases Game 最短路