成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Android中怎么實現(xiàn)軟鍵盤控制

本篇文章給大家分享的是有關Android中怎么實現(xiàn)軟鍵盤控制,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

公司專注于為企業(yè)提供成都網(wǎng)站建設、網(wǎng)站設計、微信公眾號開發(fā)、商城網(wǎng)站建設,小程序開發(fā),軟件按需求定制制作等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,成都創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。

窗口尺寸調(diào)整系列:

該系列參數(shù)用來控制當軟鍵盤彈起時,Activity 主窗口的調(diào)整策略,因為如果不調(diào)整主窗口,很可能會導致當前輸入的控件被軟鍵盤遮擋。

adjustPan:

Activity的主窗口并不會重新調(diào)整大小來為輸入法騰出空間,而是窗口的內(nèi)容會自動上下晃動來保證當前獲得焦點的控件不會被鍵盤遮擋住,然后用戶可以看見自己輸入的內(nèi)容。相比于  adjustResize 模式而言,它并不是很令人滿意,因為用戶必須關閉輸入法來和被輸入法遮擋住的控件進行交互。

adjustResize:

Activity的主窗口會重新調(diào)整大小來為輸入法騰出空間。

adjustUnspecified:

當前模式并不會明確指定 Activity 使用adjustPan 或者 adjustResize ,系統(tǒng)會自動選擇一個模式,選擇結果是,如果當前  Activity 的 Window 中,有可以滾動自身內(nèi)容的控件,比如 ScrollView,那么選擇結果就是 adjustResize,因為它認為滾動可以使  Window 中的內(nèi)容即使在一個很小的區(qū)域中也可以被看見。Activity 的默認模式就是這個模式。

adjustNoting:

Activity 的 Window 沒有任何變化。

兩種模式下,屏幕 – 主窗口 – 主窗口內(nèi)容 – 軟鍵盤 的關系如下:

Android中怎么實現(xiàn)軟鍵盤控制   

Android中怎么實現(xiàn)軟鍵盤控制

具體效果如下:

沒有滾動內(nèi)容,adjustPan:

Android中怎么實現(xiàn)軟鍵盤控制

沒有滾動內(nèi)容,adjustResize:

Android中怎么實現(xiàn)軟鍵盤控制

沒有滾動內(nèi)容,adjustUnspecified == adjustPan

Android中怎么實現(xiàn)軟鍵盤控制

有滾動內(nèi)容(ScrollView),adjustPan

Android中怎么實現(xiàn)軟鍵盤控制

有滾動內(nèi)容(ScrollView),adjustResize

Android中怎么實現(xiàn)軟鍵盤控制

有滾動內(nèi)容(ScrollView),adjustUnspecified == adjustResize

Android中怎么實現(xiàn)軟鍵盤控制

輸入法軟鍵盤顯示控制系列:

該系列參數(shù)用來控制當一個包含 Window 的事物(Activity、Dialog等)展示在屏幕最前端時,軟鍵盤的顯示或者隱藏策略。

stateUnspecified:

系統(tǒng)根據(jù)當前具體情況,選擇相應的模式。

stateUnchanged:

軟鍵盤保持它的上一個狀態(tài)(上一個Activity 或者 Dialog 在屏幕最前端時,軟鍵盤的狀態(tài)),不做變化,不管上一個狀態(tài)是顯示還是隱藏。

stateHidden:

當用戶主動進入當前界面時,軟鍵盤隱藏。離開上一個 界面,返回當前界面,不能算作 “主動進入”。被動進入時,保持上一個狀態(tài)。

stateAlwaysHidden:

只要是用戶進入該界面,就隱藏軟鍵盤,不管是主動進入(新啟動該界面),還是被動進入(離開上一個界面,返回到當前界面)。

stateVisible:

當用戶主動進入當前界面時,顯示軟鍵盤。離開上一個 界面,返回當前界面,不能算作 “主動進入”。被動進入時,保持上一個狀態(tài)。

stateAlwaysVisible:

只要是用戶進入該界面,就顯示軟鍵盤,不管是主動進入(新啟動該界面),還是被動進入(離開上一個界面,返回到當前界面)。

關于某些華為手機的一個Bug

今天遇到一個Bug,是這樣的,在某些華為手機上面,除了***次點擊輸入框,adjustPan  參數(shù)會生效(軟鍵盤可以正常彈起輸入框),后面從第二次開始,怎么點擊,adjustPan 參數(shù)都無效。

布局模型大致如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="cn.hjf.inputtest.MainActivity">   <ScrollView android:layout_width="match_parent" android:layout_height="match_parent">   <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">   <View android:layout_width="match_parent" android:layout_height="400dp" android:background="#2b532b"/>   <EditText android:layout_width="90dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:background="@null" android:gravity="center" android:inputType="numberDecimal" android:maxLength="8" android:minWidth="60dp" android:padding="5dp" android:text="0.00"/>

效果是這樣的:

Android中怎么實現(xiàn)軟鍵盤控制

經(jīng)過漫長時間的排除(很辛苦),終于找到了Bug的觸發(fā)臨界點,就是下面這兩句話:

android:gravity="center" android:inputType="numberDecimal"

又經(jīng)過了漫長時間的驗證,得出一個結論:在某些華為機型上面,在這種布局模型下,EditText 中如果設置了 inputType 參數(shù)(不為  none),那么,在 gravity 取值為某些值得時候,會導致該問題的發(fā)生。大致情況如下:

Android中怎么實現(xiàn)軟鍵盤控制

紅色表示失效,綠色表示有效(可以正常工作)。當這兩個參數(shù)不指定的時候,可以工作,因為這兩個屬性默認值的組合是可以工作的,上圖中的藍色塊。(備注:沒有完全匹配所有情況,如有相似情況,可以按需匹配,查看結果)

在源碼中可以找到這兩個屬性的默認值:

attrs.xml

themes.xml

<item name="editTextStyle">@style/Widget.EditText</item>

attrs.xml

<!-- The type of data being placed in a text field, used to help an input method decide how to let the user enter text.  The constants here correspond to those defined by {@link android.text.InputType}.  Generally you can select a single value, though some can be combined together as indicated.  Setting this attribute to anything besides <var>none</var> also implies that the text is editable. --> <attr name="inputType"> <!-- There is no content type.  The text is not editable. --> <flag name="none" value="0x00000000" />
/** * Special content type for when no explicit type has been specified. * This should be interpreted to mean that the target input connection * is not rich, it can not process and show things like candidate text nor * retrieve the current text, so the input method will need to run in a * limited "generate key events" mode, if it supports it. Note that some * input methods may not support it, for example a voice-based input * method will likely not be able to generate key events even if this * flag is set. */ public static final int TYPE_NULL = 0x00000000;

一個需求

遇到一個需求,大致模型為:有一個界面,里面有一個 輸入框 和 兩個按鈕,分別控制輸入框中數(shù)字的加減,如下圖所示:

Android中怎么實現(xiàn)軟鍵盤控制

每次輸入框數(shù)字變化,不管是手動輸入還是按鈕控制,都會出發(fā)刷新工作,刷新時會彈出一個對話框。

然后需求是這樣的,當手動輸入的時候,這時觸發(fā)刷新時,輸入法是顯示的,但是對話框顯示然后消失后,輸入法就被隱藏了。當用按鈕控制的時候,是沒問題的,因為整個過程,輸入法都是隱藏的。所以需求就是,在對話框顯示然后消失后,輸入法能保持出發(fā)刷新時的狀態(tài)。

解決問題:當把當前 Activity 設置為 stateUnchanged  的時候,并沒有達到理想的效果,因為dialog所在的window,沒有設置該屬性,所以需要把dialog的window也設置為stateUnchanged,方法為:

getWindow().setSoftInputMode()

以上就是Android中怎么實現(xiàn)軟鍵盤控制,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

新聞標題:Android中怎么實現(xiàn)軟鍵盤控制
新聞來源:http://jinyejixie.com/article24/pospje.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、全網(wǎng)營銷推廣手機網(wǎng)站建設、網(wǎng)站排名、品牌網(wǎng)站建設外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
策勒县| 右玉县| 婺源县| 古蔺县| 大田县| 吴忠市| 顺昌县| 财经| 兴业县| 盐城市| 麻江县| 邓州市| 峨眉山市| 广平县| 沭阳县| 鄂伦春自治旗| 澄城县| 天峨县| 大冶市| 德惠市| 柯坪县| 青岛市| 高阳县| 慈利县| 岢岚县| 长寿区| 邢台县| 肥城市| 建水县| 鹤峰县| 舟曲县| 普兰店市| 类乌齐县| 漳浦县| 胶南市| 江门市| 九龙坡区| 镇远县| 石渠县| 金阳县| 景泰县|