當前位置:首頁 » 安卓系統 » android滾動布局

android滾動布局

發布時間: 2022-12-13 00:24:35

Ⅰ Android實現橫縱滾動標題不動框架

用自定義標題欄。
用自定義標題欄,只要把系統自帶的標題欄去掉就行。做法:requestWindowFeature(Window.FEATURE_NO_TITLE),自己再寫兩個布局塊(LinearLayout布局)充當頂部和底部的標題欄即可,中間使用ScrollView即可完成。
如果應用需要添加水平滾動條,則可藉助於另一個滾動視圖HorizontalScrollView來實現。

Ⅱ Android上這種布局和聯動的滑動效果是怎麼做到的

CoordinatorLayout+AppBar,desgin包里的。正確的做法就是自己處理滑動事件。建議先了解一下View的事件傳遞機制。這個問題我遇到過,寫了個viewgroup解決這個問題。scrollview裡面放viewpager,布局的時候手動設置viewpager的高度。viewpager的指示器做兩個,一個放scrollview裡面,一個放scrollview外面。
老版本的網易雲音樂 曾經用過這個效果。以前實現過這樣的效果。ViewPager頂部有一個Layout。下面ViewPager中的每個ListView有一個空白的Header當前頁面上下滑動的時候動態的根據Y值去改變頂部的Layout的Y值。當頁面左右滑動完成之後, 根據當前ListView的Y值.重新絲滑的改變頂部Layout的Y值。現在有個開源項目也能實現類似的效果。

Ⅲ 【轉】Android軟鍵盤的全面解析

軟鍵盤其實是一個Dialog

InputMethodService為我們的輸入法創建了一個Dialog,並且對某些參數進行了設置,使之能夠在底部或者全屏顯示。當我們點擊輸入框時,系統會對當前的主窗口進行調整,以便留出相應的空間來顯示該Dialog在底部,或者全屏。

其實這段話我們經常在各種軟鍵盤博客所看到,但是大家並不知道Android是怎麼為我們創建的這個Dialog,所以我先帶大家來看下軟鍵盤生成這塊的源碼,了解軟鍵盤的生成流程。

我們先來看一下InputMethodService的繼承關系:

因為InputMethodService屬於服務,接下來我們先看一下服務的入口onCreate()方法:

通過上面的分析,我們懷疑這里的SoftInputWindow是軟鍵盤彈出創建的Dialog對象,下面我們看下SoftInputWindow的源碼。

看到這里大家就能明白了,為什麼說軟鍵盤就是一個Dialog。而且這里通過設置Gravity.BOTTOM來控制當前Dialog在Window中的位置。

在Android中,可以通過給Activity設置 windowSoftInputMode 這個屬性來控制軟鍵盤與Activity的主窗口的交互方式。

Activity 的主窗口與包含屏幕軟鍵盤的窗口的交互方式,該屬性的設置影響兩個方面:

該設置必須是下面所列的值之一,或者是一個「state…」值加上一個「adjust…」值的組合,在任一組中設置多個值(例如,多個「state…」值)都會產生未定義結果。各值之間使用垂直條 (|) 分隔。

下面將通過例子來介紹 adjustNoting adjustUnspecified adjustResize adjustPan 在軟鍵盤彈出的區別:

非滾動布局xml

點擊最下面的EditText12

滾動布局xml

通過上面的例子,我們可以完全理解adjust系列的各個參數的作用。而軟鍵盤的顯示和隱藏這裡面需要並不多,而且內容並不算復雜,大家回去自己嘗試下就可以。

在日常開發中,如果需要將軟鍵盤的Enter鍵更改為其他鍵,可以設置其 android:imeOptions 屬性,這個屬性可以控制軟鍵盤的Enter鍵,以及橫屏情況下的軟鍵盤顯示狀態。

該設置必須是下面所列的值之一,或者是一個「action…」值加上一個「flag…」值的組合,在action…組中設置多個值(例如,多個「action…」值)都會產生未定義結果,而flag….可以設置多個。各值之間使用垂直條 (|) 分隔

控制軟鍵盤上的Enter鍵

橫屏下控制軟鍵盤

總結一下:
這里大部分的屬性,已經介紹完畢,如果英語好的同學,可以去看下官方文檔,可以更好的理解,並且本文以搜狗輸入法為實踐,可能其他的輸入法與其顯示的不同,但是功能應該都是一樣的。

而如果要在橫屏狀態不希望軟鍵盤全屏顯示最好是將flagNoFullscreen和flagNoExtractUi結合使用,這樣體驗上會更好

android:imeOptions=」flagNoFullscreen|flagNoExtractUi」

Android官網的Api

如果需要監聽軟鍵盤的右下角的按鍵,需要為EditText設置setOnEditorActionListener()監聽:

上面的方式,只是展示了如何監聽各個按鍵的方法,如果需要消費事件,則需要return true。

(1)第一次寫這么長的博客,感覺會有一些不足,各位看官如果有不合理的地方,或者有誤的地方請直接指出。

(2)本來想整理成一個Demo的,後來簡單看來下,該有的幾乎都貼出來了,有需要的可以按需復制就可以。

(3)寫完這篇博客之後,感覺博客干貨還是不多,所以定位這篇文章算是總結性質加上實際案例性質的博客。

(4)Android軟鍵盤的總結就差不多到這里,希望各位看官,如果看到這里有收獲,就點點贊,灌灌水,頂一波,這樣博主才有寫下去的動力。

(5)感謝小輝同學的校驗,調整了文章中不通順的地方。

1.徹底搞定Android開發中軟鍵盤的常見問題
http://blog.csdn.net/mynameishuangshuai/article/details/51567357

2.Android UI(EditText)詳解
http://blog.csdn.net/qq_28057577/article/details/51919965?locationNum=12&fps=1

3.微信軟鍵盤布局閃動問題
https://blog.dreamtobe.cn/2015/09/01/keyboard-panel-switch/

Ⅳ 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方法,通知刷新結束。 從此以後,在項目的任何地方,一分鍾引入下拉刷新功能妥妥的。 好了,今天的講解到此結束,有疑問的朋友請在下面留言。 源碼下載,請點擊這里

Ⅳ android GridView 如何設置為左右可滾動

GridView不支持左右滾動。

左右滾動的需求可考慮:

  1. 在外層加一個HorizontalScrollView, 不過這種滑動體驗並不好,上下左右均可滑動,如果是斜著滑的時候,體驗差。當然,如果你會自定義HorizontalScrollView把滑動區分為斜著上下滑和斜著左右滑,再把斜著上下滑的事件傳遞給子View也是可以的。

  2. 可以考慮Viewpager里載入多個GridView,這樣GridView就可以一頁一頁的滑

Ⅵ Android上這種布局和聯動的滑動效果是怎麼做到的

實現思路簡介:viewpager是全屏的,所有頁面共用的header,根據當前頁面listview或者scrollview的滑動距離設置translationY;切換tab時,根據當前header的高度調整下一個tab頁面的滾動距離。缺點:封面上有很多響應時,需要自己進行手勢處理

Ⅶ android xml布局中如何讓部分超出屏幕的滾動

你把ScrollView內的控制項高度寫死試試

Ⅷ Android-->RecyclerView 顯示底部,滾動底部(無動畫)

當你在做聊天界面的時候, 通常進入界面後, 都需要顯示到最底部, 鵝場也是這么乾的;

很容易就能找到 RecyclerView的smoothScrollToPosition 方法.

而且也確實實現了目的;

為什麼不用 scrollToPosition 這個方法呢? 你去試試就知道!

但是,,,這個方法會帶來界面的滾動, 當聊天記錄特別多的時候, 這個滾動時間會持續很長, 顯然產品經理不爽了, 那麼看完本文, 就讓他爽個夠吧!

方法1:
使用 LinearLayoutManager的scrollToPositionWithOffset 這個方法可以完美的結果此問題;

這個方法會 滾動到指定的位置, 並且是置頂顯示 . 第二個參數可以決定 距離頂部的offset 偏移量;
如果你傳了一個不存在的position, 那麼這個方法啥也不幹.

並且並不會載入所有滾動經過的View, 只會載入 position 當前頁能顯示的View;

方法2
使用 LinearLayoutManager的逆序布局

創建 LinearLayoutManager 的時候, 第三個參數可以決定布局的順序

通常情況下, 默認 false. 也就是從上往下開始布局.

如果設置為true, 那麼LinearLayoutManager就會從底部往上開始布局,

這樣的話, position == 0 的時候, 就顯示在底部了;

這種情況下, 我們只需要把數據源, 從size-1 到 0逆序添加到 RecyclerView中, 就能達到和方法1中相同的效果.

那麼:任意位置 滾動到底部呢????

草草的實現方式:

//上面的方法2, 也同樣適用滾動到底部.

至此: 文章就結束了,如有疑問: QQ群:274306954 歡迎您的加入.

熱點內容
android版本控制 發布:2025-03-19 06:20:59 瀏覽:180
安卓手機怎麼反色 發布:2025-03-19 06:15:19 瀏覽:822
安卓開視頻時聲音小怎麼辦 發布:2025-03-19 06:08:18 瀏覽:579
文件伺服器訪問速度慢 發布:2025-03-19 05:45:36 瀏覽:637
python的下載與安裝 發布:2025-03-19 05:41:38 瀏覽:771
安卓怎麼用手電筒檢測換屏 發布:2025-03-19 05:30:33 瀏覽:674
蘋果6怎麼設置短密碼 發布:2025-03-19 04:44:41 瀏覽:20
三人樂隊怎麼配置 發布:2025-03-19 04:34:42 瀏覽:917
趣編程入口 發布:2025-03-19 04:25:09 瀏覽:942
a的存儲形式 發布:2025-03-19 04:24:00 瀏覽:792