android下拉控制項
A. androidUI鎺т歡Spinner涓嬫媺鑿滃崟鎺т歡涓ょ嶄嬌鐢ㄦ柟娉
浣跨敤android鍒朵綔琛ㄥ崟涓涓嬫媺鑿滃崟鎵浣跨敤鐨勬帶浠禨pinner鍦╝ndroid涓涓烘垜浠瀹氫箟浜嗗嶮鍒嗗ソ鐢ㄥソ鐪嬬殑鏍峰紡錛屽悓鏍風畝鍗曚嬌鐢ㄦ柟娉曚篃鏈変袱縐嶃傚垎鍒鍙浠ユ墜宸ユ瀯寤烘暟鎹鍜屼嬌鐢▁ml鑾峰彇鏁版嵁錛屽綋鐒跺疄闄呴」鐩涓闇瑕佽幏鍙栫綉緇滄暟鎹銆傚彟澶朣pinner鎺т歡闇瑕佸疄鐜癘nItemSelectedListener鎺ュ彛鏉ュ畬鎴怱pinner涓嬫媺鑿滃崟鐨勫姛鑳姐傚叿浣撲嬌鐢ㄦ柟娉曞備笅銆
涓銆佹墜宸ユ瀯寤篠pinner涓嬫媺妗嗘暟鎹
鎸夌収姝e父嫻佺▼錛岄栧厛搴斿厛鎶婂瑰簲鐨刅iew鏄劇ず鍑烘潵錛岄渶瑕佺敤鍒癟extView鍜孲pinner鎺т歡鍗沖彲錛屾墍鍦‵orm Widgets鍗沖彲鎵懼埌錛岀浉鍏充唬鐮佸拰紺轟緥鍥懼備笅銆
鍥犱負涓嬫媺鑿滃崟闇瑕佹暟鎹錛屾墍浠ユ垜浠鍏堢敤List灝嗘暟鎹婧愭斁榪涘幓錛屽畾涔変負getDataSource()銆備唬鐮佺ず渚嬪備笅銆
鏈鍚庤佸壋寤篠pinnerActivity錛屽湪鑾峰彇UI鎺т歡涔嬪悗錛岀劧鍚庡啀鍒涘緩Spinner鎺т歡閫傞厤鍣ㄥ苟瀹氫箟涓嬫媺妗嗙殑鏍峰紡錛岃繖閲屾敞鎰廇rrayAdapter瀹氫箟鐨勬硾鍨嬫槸String褰㈠紡鐨勶紝鑰屼笖android宸茬粡涓烘垜浠瀹氫箟濂戒簡涓嬫媺妗嗙殑鏍峰紡錛屾瘮濡俛ndroid.R.layout.simple_spinner_dropdown_item錛屽洜姝ゆ垜浠鐩存帴璋冪敤鍗沖彲瀹屾垚Spinner涓嬫媺妗嗘帶浠剁殑鎿嶄綔銆傜浉鍏充唬鐮佸備笅銆
浜屻佷嬌鐢╔ML鏋勫緩Spinner涓嬫媺妗嗘暟鎹
浣跨敤XML鏋勫緩Spinner涓嬫媺妗嗘暟鎹錛岀涓姝ヨ繕鏄瑕佸厛灝哣iew瑙嗗浘琛ㄧ幇鍑烘潵錛屽拰鏂規硶涓浠g爜鐩稿悓銆傜洿鎺ョ収鎼鍗沖彲銆
榪欎釜鏂規硶鐢ㄥ埌XML錛屽洜姝ゅ氨闇瑕佸埌string.xml涓瀹氫箟鏁版嵁婧愶紝紺轟緥浠g爜濡備笅錛
鏈鍚庡氨鏄鍦ㄥ壋寤虹殑SpinnerActivity涓鐩存帴鑾峰彇string.xml涓鐨勬暟鎹婧愶紝榪欓噷闇瑕佹敞鎰忕殑鏄蹇呴』瀹炵幇騫舵敞鍐岀洃鍚鍣∣nItemSelectedListener錛屾墠鑳戒嬌涔嬪墠鐨勬搷浣滅敓鏁堛俿pinner.setOnItemSelectedListener(this);銆傚彟澶栵紝閫傞厤鍣ˋrrayAdapter濡傛灉鐢ㄥ埌createFromResource鑾峰彇鏁版嵁婧愶紝灝卞繀欏誨畾涔堿rrayAdapter鐨勬硾鍨嬩負CharSequence褰㈠紡錛屽惁鍒欐姤閿欍傚叿浣撲唬鐮佸拰瀹炵幇鏁堟灉鍥懼備笅銆
B. android 下拉滾動頁面怎麼實現
以下是我自己花功夫編寫了一種非常簡單的下拉刷新實現方案,現在拿出來和大家分享一下。相信在閱讀完本篇文章之後,大家都可以在自己的項目中一分鍾引入下拉刷新功能 最近項目中需要用到ListView下拉刷新的功能,一開始想圖省事,在網上直接找一個現成的,可是嘗試了網上多個版本的下拉刷新之後發現效果都不 怎麼理想。有些是因為功能不完整或有Bug,有些是因為使用起來太復雜,十全十美的還真沒找到。因此我也是放棄了在網上找現成代碼的想法,自己花功夫編寫 了一種非常簡單的下拉刷新實現方案,現在拿出來和大家分享一下。相信在閱讀完本篇文章之後,大家都可以在自己的項目中一分鍾引入下拉刷新功能。 首先講一下實現原理。這里我們將採取的方案是使用組合View的方式,先自定義一個布局繼承自LinearLayout,然後在這個布局中加入下拉 頭和ListView這兩個子元素,並讓這兩個子元素縱向排列。初始化的時候,讓下拉頭向上偏移出屏幕,這樣我們看到的就只有ListView了。然後對 ListView的touch事件進行監聽,如果當前ListView已經滾動到頂部並且手指還在向下拉的話,那就將下拉頭顯示出來,鬆手後進行刷新操 作,並將下拉頭隱藏。原理示意圖如下: 那我們現在就來動手實現一下,新建一個項目起名叫PullToRefreshTest,先在項目中定義一個下拉頭的布局文件pull_to_refresh/apk/res/android" xmlns:tools="schemas/tools" android:id="@+id/pull_to_refresh_head" android:layout_width="fill_parent" android:layout_height="60dip" > <LinearLayout android:layout_width="200dip" android:layout_height="60dip" android:layout_centerInParent="true" android:orientation="horizontal" > <RelativeLayout android:layout_width="0dip" android:layout_height="60dip" android:layout_weight="3" > <ImageView android:id="@+id/arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/arrow" /> <ProgressBar android:id="@+id/progress_bar" android:layout_width="30dip" android:layout_height="30dip" android:layout_centerInParent="true" android:visibility="gone" /> </RelativeLayout> <LinearLayout android:layout_width="0dip" android:layout_height="60dip" android:layout_weight="12" android:orientation="vertical" > <TextView android:id="@+id/description" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_horizontalbottom" android:text="@string/pull_to_refresh" /> <TextView android:id="@+id/updated_at" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_horizontaltop" android:text="@string/updated_at" /> </LinearLayout> </LinearLayout> </RelativeLayout> 在這個布局中,我們包含了一個下拉指示箭頭,一個下拉狀態文字提示,和一個上次更新的時間。當然,還有一個隱藏的旋轉進度條,只有正在刷新的時候我們才會將它顯示出來。 布局中所有引用的字元串我們都放在stringsmit(); new HideHeaderTask()/apk/res/android" xmlns:tools="schemas/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.pulltorefreshtest.RefreshableView android:id="@+id/refreshable_view" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/list_view" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </com.example.pulltorefreshtest.RefreshableView> </RelativeLayout> 可以看到,我們在自定義的RefreshableView中加入了一個ListView,這就意味著給這個ListView加入了下拉刷新的功能,就是這么簡單! 然後我們再來看一下程序的主Activity,打開或新建MainActivity,加入如下代碼: 復制代碼 代碼如下: public class MainActivity extends Activity { RefreshableView refreshableView; ListView listView; ArrayAdapter<String> adapter; String[] items = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); refreshableView = (RefreshableView) findViewById(R.id.refreshable_view); listView = (ListView) findViewById(R.id.list_view); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); listView.setAdapter(adapter); refreshableView.setOnRefreshListener(new PullToRefreshListener() { @Override public void onRefresh() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } refreshableView.finishRefreshing(); } }, 0); } } 可 以看到,我們通過調用RefreshableView的setOnRefreshListener方法注冊了一個監聽器,當ListView正在刷新時就 會回調監聽器的onRefresh方法,刷新的具體邏輯就在這里處理。而且這個方法已經自動開啟了線程,可以直接在onRefresh方法中進行耗時操 作,比如向伺服器請求最新數據等,在這里我就簡單讓線程睡眠3秒鍾。另外在onRefresh方法的最後,一定要調用RefreshableView中的 finishRefreshing方法,這個方法是用來通知RefreshableView刷新結束了,不然我們的ListView將一直處於正在刷新的 狀態。 不知道大家有沒有注意到,setOnRefreshListener這個方法其實是有兩個參數的,我們剛剛也是傳入了一個不起眼的 0。那這第二個參數是用來做什麼的呢?由於RefreshableView比較智能,它會自動幫我們記錄上次刷新完成的時間,然後下拉的時候會在下拉頭中 顯示距上次刷新已過了多久。這是一個非常好用的功能,讓我們不用再自己手動去記錄和計算時間了,但是卻存在一個問題。如果當前我們的項目中有三個地方都使 用到了下拉刷新的功能,現在在一處進行了刷新,其它兩處的時間也都會跟著改變!因為刷新完成的時間是記錄在配置文件中的,由於在一處刷新更改了配置文件, 導致在其它兩處讀取到的配置文件時間已經是更改過的了。那解決方案是什麼?就是每個用到下拉刷新的地方,給setOnRefreshListener方法 的第二個參數中傳入不同的id就行了。這樣各處的上次刷新完成時間都是單獨記錄的,相互之間就不會再有影響。 好了,全部的代碼都在這里了,讓我們來運行一下,看看效果吧。 效果看起來還是非常不錯的。我們最後再來總結一下,在項目中引入ListView下拉刷新功能只需三步: 1. 在Activity的布局文件中加入自定義的RefreshableView,並讓ListView包含在其中。 2. 在Activity中調用RefreshableView的setOnRefreshListener方法注冊回調介面。 3. 在onRefresh方法的最後,記得調用RefreshableView的finishRefreshing方法,通知刷新結束。 從此以後,在項目的任何地方,一分鍾引入下拉刷新功能妥妥的。 好了,今天的講解到此結束,有疑問的朋友請在下面留言。 源碼下載,請點擊這里
C. android上拉刷新下拉載入 通用框架怎麼用
1. 關於下拉刷新
下拉刷新這種用戶交互最早由twitter創始人洛倫•布里切特(Loren Brichter)發明,有理論認為,下拉刷新是一種適用於按照從新到舊的時間順序排列feeds的應用,在這種應用場景中看完舊的內容時,用戶會很自然地下拉查找更新的內容,因此下拉刷新就顯得非常合理。大家可以參考這篇文章:有趣的下拉刷新,下面我貼出一個有趣的下拉刷新的案例。
2. 實現原理
上面這些例子,外觀做得再好看,他的本質上都一樣,那就是一個下拉刷新控制項通常由以下幾部分組成:
【1】Header
Header通常有下拉箭頭,文字,進度條等元素,根據下拉的距離來改變它的狀態,從而顯示不同的樣式
【2】Content
這部分是內容區域,網上有很多例子都是直接在ListView裡面添加Header,但這就有局限性,因為好多情況下並不一定是用ListView來顯示數據。我們把要顯示內容的View放置在我們的一個容器中,如果你想實現一個用ListView顯示數據的下拉刷新,你需要創建一個ListView旋轉到我的容器中。我們處理這個容器的事件(down, move, up),如果向下拉,則把整個布局向下滑動,從而把header顯示出來。
【3】Footer
Footer可以用來顯示向上拉的箭頭,自動載入更多的進度條等。
D. 怎麼改變android spinner下拉列表的寬度
設置spinner下拉菜單的寬度可在布局文件中添加如下語句:
android:dropDownWidth="100dp"
其中,100dp就是下拉菜單的寬度值,單位為像素。
Spinner控制項是一種列表類型的控制項,它的繼承關系如下:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView<Textends android.widget.Adapter>
↳ android.widget.AbsSpinner
↳ android.widget.Spinner
android.widget.Spinner繼承了android.view.ViewGroup類。
E. android中listview的下拉刷新上拉載入是怎麼實現的
這是兩個分開的部分。如果你是新手,先一個一個來。
我只能跟你說一下思路,具體的東西你在網上查查,不行再問我,新手的話慢慢來。
下拉刷新,獲取listview的下拉時間顯示header,然後調用更新數據的介面就可以了。
上啦載入,是分頁獲取數據,獲取listview的是否拉到最底,如果拉倒最底,獲取數據,讓後list的數據添加獲取的數據,更新adapter就可以了。