1. 程式人生 > >Android控制元件之帶清空按鈕(功能)的AutoCompleteTextView自動提示

Android控制元件之帶清空按鈕(功能)的AutoCompleteTextView自動提示

功能折騰完了記錄一下。帶刪除按鈕的AutoCompleteTextView,普通的自動提示控制元件用起來比較簡單,準備好陣列給控制元件setAdapter一下行了,這裡要說的是提取sqlite中的資料繫結並且加上清空按鈕,先來張圖片。

帶刪除按鈕的AutoCompleteTextView

最初沒有用過AutoCompleteTextView的時候,就直接百度了下,想必都會得到這樣一段程式碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 publicclassMainActivityextendsActivity{ privateAutoCompleteTextView autotext; privateArrayAdapter<String>arrayAdapter; @Override protectedvoidonCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.test); autotext
=(AutoCompleteTextView)findViewById(R.id.autotext); String[]arr={"aa","aab","aac"}; arrayAdapter=newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr); autotext.setAdapter(arrayAdapter); } }

上面的程式碼簡單,但是不大實用,比如我的需求就是,要有清空按鈕。然後繼續百度,又找到了這篇文章(繼承AutoCompleteTextView自定義控制元件ClearableAutoCompleteTextView,自定義adapter方式實現)

1 <span style="font-style: italic; color: #629755;">https://gist.github.com/mderazon/6700044</span>

然後就閉著眼抄了一下,修改一點,滿足了需求。其實碰上問題就百度這種方式是很不對的,所有的控制元件使用方法在Android Develop Docs中都有介紹:/sdk/docs/reference/android/widget/AutoCompleteTextView.html。哎,我們都是應用程式猿,但我們又連API都不看。。。或許你覺得密密麻麻的英文看著頭疼?或許你又翻不了牆?或許吧,還是那句老話,成功的人找方法,而失敗的人嘛,對吧。

今天想給AutoCompleteTextView加個圖示,就是上圖左側那個放大鏡按鈕,於是找好素材,設定drawableLeft,執行,發現沒有效果。於是檢視自定義控制元件的原始碼(就是上面使用自定義adapter的那個連結裡提到的),發現是在init方法中綁定了setOnTouchListener, 然後onTouchListener中又通過MotionEvent判斷觸控的區域,而觸控的物件使用的是setCompoundDrawablesWithIntrinsicBounds,這不就是drawableLeft、drawableRight所對應的方法嘛,果斷刪除自定義控制元件ClearableAutoCompleteTextView,使用原生AutoCompleteTextView,加入drawableLeft放大鏡按鈕,drawableRight使用刪除小圖示,然後對控制元件setOnTouchListener,程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 actvCityLetter.setOnTouchListener(newView.OnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEvent event){ if(actvCityLetter.getCompoundDrawables()[2]==null) returnfalse; if(event.getAction()!=MotionEvent.ACTION_UP) returnfalse; //觸控點位置判斷 if(event.getX()>actvCityLetter.getWidth()-actvCityLetter.getPaddingRight()-getResources().getDimension(R.dimen.space_4_touch)){ actvCityLetter.setText(""); } returnfalse; } });

一下子就腰不疼腿不酸了。注意“觸控點位置判斷”那行,意思是當前觸控點如果大於AutoCompleteTextView的寬度減去paddingRight的值再剪掉一個固定值(R.dimen.space_4_touch,我這裡是10dip),就算觸控到了刪除小圖示;固定值是多少根據情況來,值越大可以觸控的空間越大,相反越小,使用者可能就點選不到那塊區域(刪除小圖示的區域)從而激發不了事件,這也算是優化使用者體驗的一種手段吧。

相關推薦

Android控制元件按鈕(功能)的AutoCompleteTextView自動提示

功能折騰完了記錄一下。帶刪除按鈕的AutoCompleteTextView,普通的自動提示控制元件用起來比較簡單,準備好陣列給控制元件setAdapter一下行了,這裡要說的是提取sqlite中的資料繫結並且加上清空按鈕,先來張圖片。 最初沒有用過AutoComplet

android自定義view_ClearEditText按鈕的輸入框

建立一個類繼承EditText import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.Drawable; impo

Android 按鈕的Edittext

import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.support

android自定義文字框,後面按鈕

class MyEditText extends EditText { private final String TAG = "MyEditText"; private Drawable dRight; private Rect rBounds; // 構造器 public MyEditText(Conte

自定義控制元件 SubmitBotton (提交按鈕

在 Android 中我覺得除了實現很多功能性很強的需求之外,最吸引我的就是各種炫酷的自定義控制元件,但是自定義控制元件這個東西沒有辦法用一種固定的模式來講解,因為自定義控制元件都是根據需求來定製的。同時這也說明只要程式猿牛逼,就沒有實現不了的功能。 之前有看到一個效果: Android

Android控制元件LabelView

          最近研究android控制元件開發,學習無捷徑,逛github,看到一個LabelView的demo,感覺還是挺不錯,也比較實用,所以拿來學習了一下。         附上源專案的地址:

Android控制元件圓形進度條

Android-自定義ProgressBar實現圓弧進度條 在之前的專案中用到過這個,感覺還是非常實用的,我實現的是額度的增長. 繼承於ProgressBar實現,保留了Progressbar的特性,原始碼在文尾。

Android控制元件ListView(初識)

ListView 控制元件可使用四種不同檢視顯示專案。通過此控制元件,可將專案組成帶有或不帶有列標頭的列,並顯示伴隨的圖示和文字。 ListView有四種模式: 其作用是新增選擇按鈕框。 設定單選框 Lv.setChoiceMode(ListView.CHOICE_MOD

Android控制元件AutoCompleteTextView提示輸入

效果圖  AutoComepleteTextView 控制元件的主要的作用是在使用者輸入中,提示輸入。但是隻能提示一次。這裡就出項了MultiautoCompleteTextView控制元件,其主要的功能是也是在使用者輸入中提示輸入。 AutoComepleteTextVie

Android 控制元件 RecyclerView(一)—— 載入檢視和佈局選擇

本文目錄 一、概述 二、列表檢視的處理 1. item 的佈局檔案 2. 構造 Adapter 類 3. 佈局管理器 1)LinearLayoutManager 2)GridLayoutManager

Android控制元件RecyclerView的基本使用

三、RecyclerView使用時要匯入android.suport.v7.wedget.RecyclerView包。 RecyclerView實現新增和刪除的簡單例子 <span style="font-size:18px;">public class MainActivity extend

Android控制元件SlidingDrawer(滑動式抽屜)詳解與例項

SlidingDrawer效果想必大家也見到過,它就是1.5模擬器上進入應用程式列表的效果。下面是截圖  一、簡介    SlidingDrawer隱藏屏外的內容,並允許使用者通過handle以顯示隱藏內容。它可以垂直或水平滑動,它有倆個View組成,其

Android開發:Android控制元件Spinner

public class SpinnerDemo extends Activity {    @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState)

android控制元件ZoonControls(縮放控制元件)的使用

我們在android開發的過程中經常看到的縮放圖示按鈕。 ZoomControls的使用,主要是監聽兩個事件: OnZoomInClickListener(放大監聽事件) OnZoomOutClickListener(縮小監聽事件) 該控制元件使用非常簡單。 以縮放tex

Android控制元件WebView(網頁調轉回APP)

問題來源:網頁跳轉回應用 APP開啟網頁,網頁放置在伺服器中(例如,APP開啟百度網頁),開啟網頁之後在某一時刻需要從網頁在跳轉回到APP。 實現原理:使用URI再加上Intent來實現。 URI介紹: 就Android平臺而言,URI主要分三個部分:s

Android控制元件ProgressBar基本用法

1、ProgressBar控制元件簡介 ProgressBar類的繼承關係 java.lang.Object android.view.View android.widget.ProgressBar 在某些操作的進度中的可視指示器,為使用者呈現操作的進度,它還有一個次要的進

Android控制元件WebView(基礎知識)

1. 常用設定 1.1 開啟網頁時不呼叫系統瀏覽器,而是在WebView中顯示。 WebView如果不設定setWebViewClient(),網頁在系統系統瀏覽器中開啟,如果設定則在WebView中顯示,同時還可以自定義WebViewClient。

Android控制元件:RadioButton(單選按鈕)

首先,在佈局檔案 activity_main.xml中註冊一個RadioGroup,併為RadioGroup設定監聽,圖中兩個RadioButton為一個RadioGroup。 activity_main.xml <LinearLayout xmlns:and

android控制元件AutoCompleteTextView下拉列表顯示一片空白

在使用AutoCompleteTextView控制元件時,出現控制元件的下拉列表顯示為空白, 當選中下拉列表的某一欄時卻能看見內容的現象。 原始碼:ArrayAdapter adapter = new ArrayAdapter(AutoComplite.this, and

Android控制元件ImageView(一)

前言 Hi,喜歡每天練習的小夥伴肯定對上一篇的Button瞭如指掌了,那麼今天我們為大家帶來了ImageView控制元件,這個控制