1. 程式人生 > >記錄Android開發中使用HorizontalScrollView的坑

記錄Android開發中使用HorizontalScrollView的坑

前言

對於Android中的HorizontalScrollView控制元件,第一感覺是不怎麼熟悉的,在以往的專案開發基本沒有使用到. 橫向的滾動佈局也可以使用RecyclerView控制元件,所以HorizontalScrollView的使用頻率確實不高. 最近開發的功能點需要使用到橫向滾動的佈局,往橫向滾動的佈局中新增圖片,所以就打算使用HorizontalScrollView控制元件,這樣也可以對其有一定的瞭解.

之所以寫這篇文章不是總結HorizontalScrollView控制元件的,官方文件或者大牛都有翻譯的文章,都可以瞭解得非常透徹,這篇文章主要還是記錄開發中遇到的坑,簡單做個記錄,挖坑埋坑.

似坑非坑

使用的場景

HorizontalScrollView佈局巢狀一個橫向的線性佈局,動態新增ImageView控制元件(佈局引數已設定)到橫向線性佈局,當HorizontalScrollView的內容超過螢幕的寬度之後,再讓檢視滾動到最右邊;

出現的問題:

每次新增ImageView後,只滾動到倒數第二個的ImageView控制元件,而不滾動到最後那個剛新增的ImageView控制元件。當HorizontalScrollView的內容超過螢幕的寬度之後,再新增ImageView控制元件,就會使得每次最後的ImageView控制元件不被顯示;

緣由

當向HorizontalScrollView新增完ImageView(也就是addView)之後,不會立馬就顯示,而是在佇列中等待處理,雖然很快就會顯示,但是如果立即使檢視滾動到最右邊(呼叫其api為fullScroll), 這時候view可能還沒有顯示出來,所以就出現只滾動到倒數第二的ImageView控制元件,應該通過handler在新執行緒中更新

解決方法

mHsvContainer.postDelayed(new Runnable() {
     @Override
     public void run() {
        mHsvContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);//主執行緒
     }
},100);

/**或者下面定時器延遲*/
Timer timer=new Timer();
timer.schedule(new TimerTask() {
        @Override
        public void run() {
               mHsvContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
        }
},100
L);

思路:動態新增子View之後,通過延時100毫秒左右,再讓HorizontalScrollView滾動,就可以使得HorizontalScrollView滾動到最右邊

其它

上面讓HorizontalScrollView滾動到最右邊,使用的api是fullScroll(int direction),引數direction是指定滾動的方向.之前開發使用ScrollView時也有用到這個api,是指定ScrollView向底部滾動.api的使用還是非常簡單而且簡潔的.在讓其檢視滾動這個功能中也嘗試了其它兩個api,分別是arrowScroll和pageScroll,作用大致相同.

public boolean fullScroll (int direction)

處理按下”home/end”快捷鍵之後的滾動相應,引數是指定其滾動的方向,滾動同時會將焦點賦予移動後可視的最左或最右的元件.

public boolean arrowScroll (int direction)

響應點選左右箭頭時對滾動條的處理,引數是指定其滾動的方向.

public boolean pageScroll (int direction)

處理按下”page up/down”快捷鍵之後的滾動響應,引數是指定其滾動的方向,此方法會將檢視往左或往右滾動一個頁面的距離,同時將焦點賦予移動後可視的最左或最右的元件.

總結

  • 習慣了每篇文章的總結,這次就感嘆幾聲:” 每天的事都做不完,日子還是一天天過,偶爾是挺迷茫的,想想那些美好的辛酸的,日子還是繼續著過.”

相關推薦

記錄Android開發使用HorizontalScrollView

前言 對於Android中的HorizontalScrollView控制元件,第一感覺是不怎麼熟悉的,在以往的專案開發基本沒有使用到. 橫向的滾動佈局也可以使用RecyclerView控制元件,所以HorizontalScrollView的使用頻率確實不高.

記錄Android開發一個小,佈局檔案TextView新增onClick後,點選無效問題

自己寫東西的時候,在TextView上添加了onClick去增加點選事件,去跳轉另一個Activity,執行後結果點選無效,新增Toast,Toast也不顯示,程式碼如下: <TextView android:layout_width="wrap_content"

經驗之談;Android開發需注意的一些

1、不要排斥新技術和新工具。 Android Studio 1.0 之後的版本,基本已經穩定到可以支援正常的工作開發的程度了。單純就書寫效率而言,Android Studio 帶來的好處絕對大於它和Gradle的學習成本。JetBrains的IDE,用過都說好。 還有就是適當的提升targe

Android開發遇到的

一、使用Proxy後Gradle無限編譯 出現場景 正常開啟 Android Studio 3.1.4 時,由於無法連線Google伺服器,導致無法下載API,所以通過proxychains進行啟動,正常下載好Api後,在建立專案的時候出現了Gradle無限編譯的問題,表

android 開發遇到的(不定期新增)

學了android好久還是小白的傻孩子,遇到了各種奇奇怪怪的坑,記錄一下以防忘記。 8.0坑: 坑1:傳送Intent訊息開啟apk安裝程式,6.0的手機用的好好的,到8.0手機安裝頁面就一閃而過了 原因:8.0移除了“允許未知來源”的檢查框,它關掉了!!!!所以我這個未知來源的安裝就被

記錄自己開發踩過的一些

如題,進以此來記錄日常開發中遇到的一些坑,近期抽空整理一下並長期更新~~ 排名不分先後,隨踩隨記~ 1.部分手機App喚起第三方支付(微信/支付寶)不成功 以支付寶為例,環境為華為Mate7 EMUI4.0(Android6.0)系統,體驗發現

React Native Android 開發遇到的

react native 更新非常活躍,下面的總結可能在後續會被完善修改好,根據react native 版本情況採用下面的方法, 我在使用的時間是 2015年12月10日。 網路請求方式,我使用官網的示例程式碼並沒用成功,簡單修改後才能使用 示例

Android 開發一些不得不知的(二)

如何正確的在ScrollView裡做巢狀 日常開發中,經常會遇到ScrollView巢狀ListView,GridView或者是ViewPager,更有甚者是ScrollView巢狀ScrollView,這樣一來必然會導致一系列的問題,比如ListView顯示

android開發,ListView輸入框與軟鍵盤的

這兩天遇到了一個頭疼的問題,一直沒找到好久辦法,各種百度,google,看了很多大牛們的帖子後,才找到了一點思路,下面我就把解決辦法給大家分享一下。 主要的問題是:ListView中edittext,輸入資料的時候,軟鍵盤彈出,但是輸入完成後,如果不大軟鍵盤縮回去,輸入的

Android開發的Service的兩種啟動方式的

和大家熟悉的Activity元件一樣,service也是Android應用開程式發中常用的元件,它和acitivy一樣也有自己的生命週期,不同的是service是執行在後臺的,沒有同用戶直接互動的介面。  service的是有兩種啟動方式: 第一種是通過startserv

android 開發遇到的一些小的知識點在此做一個記錄(持續更新)

1.localBroadcaseManager中傳送的是應用內廣播,只能在應用中通過regiset註冊才可監聽,靜態註冊及其他方式都監聽不到,必須通過LocalBroadCastManager.register註冊的廣播接收者才可以監聽到 2.handler處

Android開發一些小記錄

1.有的時候,我們會從庫上check一些結構比較奇葩的工程,由於各種原因導致IDEA無法識別出版本同步工具是什麼,解決辦法,cd到.idea目錄下,在vcs.xml檔案中mapping節點的vcs屬性上配置上工具名稱Git即可(我用的是Git,所以我這裡就配置Git了),然後重啟IDEA就好了。

Android開發有用工具之--Log工具類

util lena 日誌 日誌信息 stat 們的 常常 我們 imp 在開發的過程中。我們常常會使用Log來輸出日誌,幫助我們來調試程序 可是有時候並不能全然滿足我們的須要 ,比方我想知道這個日誌信息是來自於哪一個包 哪一個類 所以我們封裝一個這個Log類。方便我們的

Android學習探索之Java 8 在Android 開發的應用

相關 概念 容易 並不是 min etc bstr trac flavor 前言: Java 8推出已經將近2年多了,引入很多革命性變化,加入了函數式編程的特征,使基於行為的編程成為可能,同時減化了各種設計模式的實現方式,是Java有史以來最重要的更新。但是Androi

android開發如何使用JavaMail程序

有一個 pro 會話 jpg names prot get ext 會有  javaMail,是提供給開發者處理電子郵件相關的編程接口。它是Sun發布的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。我們可以基於JavaMail開發出類似於Microsoft

Android開發的各種尺度單位

href roi 放大 pla blank 區別 csdn tro 自定義 px 像素(pixel),表示屏幕上一個物理像素點 不建議直接使用 px 繪制UI,因為受像素密度的影響,以 px 為單位繪制的UI在不同手機上顯示的實際大小會不同 dp (用於定義控件

android開發——Android開發的47個小知識

環境 底部 枚舉 目前 mount ram 啟動 creat ica 1、判斷sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environm

Android開發幾種有用的的日歷控件實現

顯示 lec 外觀 翻頁 frame 時間 lean android平臺 星期 我們大家都知道,在Android平臺3.0中才新增了日歷視圖控件,可以顯示網格狀的日歷內容,那麽對於3.0以下的版本要使用日歷控件只能借助第三方,目前用的最多的是CalendarView。 先簡

Android開發java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}

net 控件 view etc spi pos rst ack data Android開發中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullP

Android開發dp,sp和px之間的轉換

font col art gpo ati pan ext 同時 style 本文轉載於 http://blog.csdn.net/student9128/article/details/53932470 眾所周知,在Android開發中dp和px,sp和px之間的轉換時必不