整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          Android 軟鍵盤(pán)控制方法、以及開(kāi)發(fā)中遇到的一些問(wèn)題

          Android 提供了 windowSoftInputMode 屬性來(lái)控制輸入法軟鍵盤(pán)窗口和 Activity 主窗口的交互,分為 窗口尺寸調(diào)整系列 和 輸入法軟鍵盤(pán)顯示控制系列。

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

          該系列參數(shù)用來(lái)控制當(dāng)軟鍵盤(pán)彈起時(shí),Activity 主窗口的調(diào)整策略,因?yàn)槿绻徽{(diào)整主窗口,很可能會(huì)導(dǎo)致當(dāng)前輸入的控件被軟鍵盤(pán)遮擋。

          adjustPan:

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

          adjustResize:

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

          adjustUnspecified:

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

          adjustNoting:

          Activity 的 Window 沒(méi)有任何變化。

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

          具體效果如下:

          沒(méi)有滾動(dòng)內(nèi)容,adjustPan:

          沒(méi)有滾動(dòng)內(nèi)容,adjustResize:

          沒(méi)有滾動(dòng)內(nèi)容,adjustUnspecified == adjustPan

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

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

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

          輸入法軟鍵盤(pán)顯示控制系列:

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

          stateUnspecified:

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

          stateUnchanged:

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

          stateHidden:

          當(dāng)用戶(hù)主動(dòng)進(jìn)入當(dāng)前界面時(shí),軟鍵盤(pán)隱藏。離開(kāi)上一個(gè) 界面,返回當(dāng)前界面,不能算作 “主動(dòng)進(jìn)入”。被動(dòng)進(jìn)入時(shí),保持上一個(gè)狀態(tài)。

          stateAlwaysHidden:

          只要是用戶(hù)進(jìn)入該界面,就隱藏軟鍵盤(pán),不管是主動(dòng)進(jìn)入(新啟動(dòng)該界面),還是被動(dòng)進(jìn)入(離開(kāi)上一個(gè)界面,返回到當(dāng)前界面)。

          stateVisible:

          當(dāng)用戶(hù)主動(dòng)進(jìn)入當(dāng)前界面時(shí),顯示軟鍵盤(pán)。離開(kāi)上一個(gè) 界面,返回當(dāng)前界面,不能算作 “主動(dòng)進(jìn)入”。被動(dòng)進(jìn)入時(shí),保持上一個(gè)狀態(tài)。

          stateAlwaysVisible:

          只要是用戶(hù)進(jìn)入該界面,就顯示軟鍵盤(pán),不管是主動(dòng)進(jìn)入(新啟動(dòng)該界面),還是被動(dòng)進(jìn)入(離開(kāi)上一個(gè)界面,返回到當(dāng)前界面)。

          關(guān)于某些華為手機(jī)的一個(gè)Bug

          今天遇到一個(gè)Bug,是這樣的,在某些華為手機(jī)上面,除了第一次點(diǎn)擊輸入框,adjustPan 參數(shù)會(huì)生效(軟鍵盤(pán)可以正常彈起輸入框),后面從第二次開(kāi)始,怎么點(diǎn)擊,adjustPan 參數(shù)都無(wú)效。

          布局模型大致如下:

          [html] view plain copy print?

          1. <RelativeLayout

          2. xmlns:android="http://schemas.android.com/apk/res/android"

          3. xmlns:tools="http://schemas.android.com/tools"

          4. android:id="@+id/activity_main"

          5. android:layout_width="match_parent"

          6. android:layout_height="match_parent"

          7. tools:context="cn.hjf.inputtest.MainActivity">

          8. <ScrollView

          9. android:layout_width="match_parent"

          10. android:layout_height="match_parent">

          11. <LinearLayout

          12. android:layout_width="match_parent"

          13. android:layout_height="match_parent"

          14. android:orientation="vertical">

          15. <View

          16. android:layout_width="match_parent"

          17. android:layout_height="400dp"

          18. android:background="#2b532b"/>

          19. <EditText

          20. android:layout_width="90dp"

          21. android:layout_height="wrap_content"

          22. android:layout_gravity="center_vertical"

          23. android:background="@null"

          24. android:gravity="center"

          25. android:inputType="numberDecimal"

          26. android:maxLength="8"

          27. android:minWidth="60dp"

          28. android:padding="5dp"

          29. android:text="0.00"/>

          30. </LinearLayout>

          31. </ScrollView>

          32. </RelativeLayout>

          33. <RelativeLayout

            效果是這樣的:

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

            [html] view plain copy print?

            1. android:gravity="center"

            2. android:inputType="numberDecimal"

            android:gravity="center"

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

            紅色表示失效,綠色表示有效(可以正常工作)。當(dāng)這兩個(gè)參數(shù)不指定的時(shí)候,可以工作,因?yàn)檫@兩個(gè)屬性默認(rèn)值的組合是可以工作的,上圖中的藍(lán)色塊。(備注:沒(méi)有完全匹配所有情況,如有相似情況,可以按需匹配,查看結(jié)果)

            在源碼中可以找到這兩個(gè)屬性的默認(rèn)值:

            attrs.xml

            [html] view plain copy print?

            1. <!-- Default EditText style. -->

            2. <attr name="editTextStyle" format="reference" />

            <!-- Default EditText style. -->

            themes.xml

            [html] view plain copy print?

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

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

            styles.xml

            [html] view plain copy print?

            1. <style name="Widget.EditText">

            2. <item name="focusable">true</item>

            3. <item name="focusableInTouchMode">true</item>

            4. <item name="clickable">true</item>

            5. <item name="background">?attr/editTextBackground</item>

            6. <item name="textAppearance">?attr/textAppearanceMediumInverse</item>

            7. <item name="textColor">?attr/editTextColor</item>

            8. <item name="gravity">center_vertical</item>

            9. <item name="breakStrategy">simple</item>

            10. <item name="hyphenationFrequency">normal</item>

            11. </style>

            <style name="Widget.EditText">

            attrs.xml

            [html] view plain copy print?

            1. <!-- The type of data being placed in a text field, used to help an

            2. input method decide how to let the user enter text. The constants

            3. here correspond to those defined by

            4. {@link android.text.InputType}. Generally you can select

            5. a single value, though some can be combined together as

            6. indicated. Setting this attribute to anything besides

            7. <var>none</var> also implies that the text is editable. -->

            8. <attr name="inputType">

            9. <!-- There is no content type. The text is not editable. -->

            10. <flag name="none" value="0x00000000" />

            11. ..........

            <!-- The type of data being placed in a text field, used to help an

            [java] view plain copy print?

            1. /**

            2. * Special content type for when no explicit type has been specified.

            3. * This should be interpreted to mean that the target input connection

            4. * is not rich, it can not process and show things like candidate text nor

            5. * retrieve the current text, so the input method will need to run in a

            6. * limited "generate key events" mode, if it supports it. Note that some

            7. * input methods may not support it, for example a voice-based input

            8. * method will likely not be able to generate key events even if this

            9. * flag is set.

            10. */

            11. public static final int TYPE_NULL = 0x00000000;

            /**

            一個(gè)需求

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

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

            然后需求是這樣的,當(dāng)手動(dòng)輸入的時(shí)候,這時(shí)觸發(fā)刷新時(shí),輸入法是顯示的,但是對(duì)話(huà)框顯示然后消失后,輸入法就被隱藏了。當(dāng)用按鈕控制的時(shí)候,是沒(méi)問(wèn)題的,因?yàn)檎麄€(gè)過(guò)程,輸入法都是隱藏的。所以需求就是,在對(duì)話(huà)框顯示然后消失后,輸入法能保持出發(fā)刷新時(shí)的狀態(tài)。

            解決問(wèn)題:當(dāng)把當(dāng)前 Activity 設(shè)置為 stateUnchanged 的時(shí)候,并沒(méi)有達(dá)到理想的效果,因?yàn)閐ialog所在的window,沒(méi)有設(shè)置該屬性,所以需要把dialog的window也設(shè)置為stateUnchanged,方法為:

            [java] view plain copy print?

            1. getWindow().setSoftInputMode()

          天這篇文章我們主要來(lái)看一下表單的控件都有哪些,如何使用表單標(biāo)簽,與用戶(hù)交互。

          (1)網(wǎng)站怎樣與用戶(hù)進(jìn)行交互?

          答案是使用HTML表單(form)。表單是可以把瀏覽者輸入的數(shù)據(jù)傳送到服務(wù)器端,這樣服務(wù)器端程序就可以處理表單傳過(guò)來(lái)的數(shù)據(jù)。

          使用語(yǔ)法:<form method="傳送方式" action="服務(wù)器文件"></form>

          詳細(xì)講解:

          1、<form> :<form>標(biāo)簽是成對(duì)出現(xiàn)的,以<form>開(kāi)始,以</form>結(jié)束。

          2、action :瀏覽者輸入的數(shù)據(jù)被傳送到的地方,比如一個(gè)PHP頁(yè)面(save.php),后臺(tái)可以通過(guò)這個(gè)文件來(lái)接收前端傳過(guò)去的數(shù)據(jù)資料并進(jìn)行分析處理。

          3、method : 數(shù)據(jù)傳送的方式(get/post),get多用于獲取數(shù)據(jù),post多用于提交數(shù)據(jù)(關(guān)于這一塊大家可以簡(jiǎn)單了解一下即可,后期我們會(huì)在網(wǎng)站制作的時(shí)候進(jìn)行講解)。

          注意:所有表單控件(文本框、文本域、按鈕、單選框、復(fù)選框等)都必須放在 <form></form> 標(biāo)簽之間(否則用戶(hù)輸入的信息可提交不到服務(wù)器上哦!)。

          (2)表單控件介紹

          1)文本輸入框、密碼輸入框

          當(dāng)用戶(hù)要在表單中鍵入字母、數(shù)字等內(nèi)容時(shí),就會(huì)用到文本輸入框。文本框和密碼框只有type類(lèi)型的區(qū)別,其它的寫(xiě)法是一樣的。

          使用語(yǔ)法:

          文本輸入框:<input type="text" name="文本名稱(chēng)" value="文本內(nèi)容" placeholder="文本提示信息" />

          密碼輸入框:<input type="password" name="密碼名稱(chēng)" value="密碼信息" placeholder="密碼提示信息" />

          詳細(xì)講解:

          1、type:當(dāng)type="text"時(shí),輸入框?yàn)槲谋据斎肟颍斎氲奈淖质强梢钥匆?jiàn)的;當(dāng)type="password"時(shí), 輸入框?yàn)槊艽a輸入框,輸入的文字內(nèi)容是無(wú)法看見(jiàn)的。

          2、name:為文本框/密碼框命名,以備后臺(tái)程序使用。

          3、value:為文本輸入框輸入的內(nèi)容。

          4、placeholder:當(dāng)我們的value內(nèi)容為空的時(shí)候顯示,用于提示輸入框輸入信息格式;

          使用練習(xí):我們創(chuàng)建一個(gè)表單,表單里邊包含用戶(hù)名和密碼輸入框。具體的代碼如下圖所示:

          在網(wǎng)頁(yè)中的顯示效果如下所示:

          2)多行文本輸入框

          上邊文本輸入框用于輸入單行的文本內(nèi)容,當(dāng)用戶(hù)需要在表單中輸入大段文字時(shí),需要用到文本輸入域。

          使用語(yǔ)法:<textarea rows="行數(shù)" cols="列數(shù)" placeholder="多行文本提示信息" >文本</textarea>

          詳細(xì)講解:

          1、<textarea>標(biāo)簽是成對(duì)出現(xiàn)的,以<textarea>開(kāi)始,以</textarea>結(jié)束。

          2、cols:用于控制多行輸入域的列數(shù),rows :用于控制多行輸入域的行數(shù)。

          3、placeholder:當(dāng)我們的textarea內(nèi)容為空的時(shí)候顯示,用于提示輸入框輸入信息格式;

          使用練習(xí):我們創(chuàng)建一個(gè)新的表單,表單里邊包含用戶(hù)名和密碼輸入框和用戶(hù)個(gè)人簡(jiǎn)介多行輸入框。具體的代碼如下圖所示:

          我們?cè)倬W(wǎng)頁(yè)中的顯示效果就如下圖所示:

          好了,本篇文章就先給大家介紹這兩個(gè)表單控件的語(yǔ)法以及使用,下篇文章我們將介紹下拉框、選擇框、多選框的語(yǔ)法及使用,記得要多加練習(xí)才是王道。

          每日金句:把每一件簡(jiǎn)單的事做好就是不簡(jiǎn)單;把每一件平凡的事做好就是不平凡。喜歡我的文章的小伙伴記得關(guān)注一下哦,每天將為你更新最新知識(shí)。

          :想了解input和label請(qǐng)參看我寫(xiě)的文【207】點(diǎn)我進(jìn)入【207】

          一、button。

          <button>是按鈕標(biāo)簽,<input type="button" />也是按鈕標(biāo)簽,它們之間的區(qū)別就是button更加強(qiáng)大,它除了可以包含文本之外,還可以包含格式化的文本和圖像,這就是它的強(qiáng)大所在,下面展示它的圖片按鈕功能,當(dāng)然我畫(huà)的按鈕很丑,別介意。

          圖1

          圖2

          這里隨便講講button標(biāo)簽的四個(gè)常用屬性。

          1. disabled禁用按鈕
          2. name指定按鈕名稱(chēng)
          3. type按鈕類(lèi)型,屬性值有button,reset,submit三個(gè)
          4. value按鈕的初始值

          圖3

          圖4

          圖5

          二、select。

          select是列表和下拉菜單,select不能一個(gè)人戰(zhàn)斗,它需要option的配合。

          圖6

          圖7

          disable是禁用的意思。

          圖8

          圖9

          optgroup可以對(duì)option進(jìn)行分組。

          圖10

          圖11

          selected初始被選中的項(xiàng),開(kāi)始時(shí)默認(rèn)選中菠蘿。

          圖12

          圖13


          主站蜘蛛池模板: 久久免费区一区二区三波多野| 亚洲国产成人一区二区三区| 亚洲欧洲一区二区三区| 久久久久久一区国产精品| 99精品一区二区三区| 伦理一区二区三区| 日亚毛片免费乱码不卡一区| 国产精品久久久久久麻豆一区| 精品一区二区三区免费观看| 国产精品美女一区二区| 日本高清一区二区三区 | 久久免费国产精品一区二区| 波多野结衣精品一区二区三区 | 国产色精品vr一区区三区| 国产乱码精品一区二区三区| 波多野结衣一区视频在线| 亚洲福利视频一区| 无码AV天堂一区二区三区| 亚洲av日韩综合一区在线观看| 国产伦精品一区二区免费| 亚洲第一区精品观看| 国产成人久久精品麻豆一区| 日韩精品一区二区三区不卡| 无码AⅤ精品一区二区三区| 一区二区不卡视频在线观看| 小泽玛丽无码视频一区| 一区 二区 三区 中文字幕| 一区二区三区四区在线视频| 国产另类ts人妖一区二区三区 | 日韩在线不卡免费视频一区| 一区二区在线免费观看| 3d动漫精品啪啪一区二区中文 | 久久精品一区二区三区不卡| 国产一区二区三区不卡AV| 一区二区三区在线免费看| 日韩一区二区在线播放| 国精产品一区一区三区有限在线| 精品人妻少妇一区二区三区不卡| 国产高清视频一区二区| 午夜精品一区二区三区在线视| 狠狠综合久久AV一区二区三区 |