1. 程式人生 > >andriod 自定義軟鍵盤及解決遮擋文字框問題

andriod 自定義軟鍵盤及解決遮擋文字框問題

       首先建立鍵盤框架檔案:numskeys.xml對應的按鍵數字對應相應的ASII碼,按鍵寬度和按鍵高度按照百分比設定。對應按鍵的功能寫在XMLKeysUtils工具類中,對應按鍵功能寫在onKey方法裡,遍歷陣列或者if…else…語句完成。

  drawable資料夾下有keys_board_selector.xmlkeys_normal_shape.xmlkeys_pressed_shape.xml檔案,keys_board_selector.xml檔案將後兩個檔案聯絡到一起,設定觸發狀態,<item   />類似於if語句,當不按下按鍵時顯示normal狀態,當按下時顯示

pressed狀態。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
android:state_pressed="true"
         
android:drawable="@drawable/keys_pressed_shape"/>
    <item
android:drawable="@drawable/keys_normal_shape"/>
</selector>

layout資料夾下包含key_board_view.xml

key_preview_layout.xmlkey_display_view.xml三個檔案,其中key_preview_layout.xml檔案描述的是鍵盤按下時候為突出按下的按鍵額外顯示出來的按鍵,相當於按鍵放大顯示。在key_board_view.xml檔案中引用:

android:keyPreviewLayout="@layout/key_preview_layout"

        key_display_view.xml檔案將鍵盤(key_board_view.xml)上繫結一個editText控制元件,用於顯示鍵盤上輸入的資訊。

spec_layout.xml檔案將鍵盤與

TableLayout控制元件的輸入框寫在一起,TableLayout外面套一個LinearLayout。為了使鍵盤不遮住輸入框,在LinearLayout外面在套一個ScrollView,即ScrollView層和includekey_display_view.xml並列,接著外面還有一個LinearLayout

        有必要先闡述一下如何理解的隱藏鍵盤,本人新手入門這可能是一種超級low的方法:為了隱藏鍵盤,我一開始想的是能不能把系統內建鍵盤替換掉,然後在github上找例子看,就做成了把鍵盤和頁面寫在一個佈局裡,預設介面下隱藏的鍵盤介面,然後在點選editText時候顯示鍵盤,為了區別這個介面上的editText和鍵盤上帶的那個editText,將鍵盤上的editText記為showText。點選editText時,繫結到showText上,關閉隱藏系統自帶鍵盤,顯示自定義軟鍵盤。按確定鍵時將showText內容寫到editText上,取消鍵時候隱藏軟鍵盤。

遇到的問題:

  1. 點選editText時而顯示自定義軟鍵盤時而顯示系統自帶鍵盤,於是將禁用系統自帶鍵盤的語句,從螢幕的點選監聽事件移到了自定義鍵盤的建構函式後。然後是點選自定義鍵盤需要點選兩下才能顯示鍵盤,找到原因是editext寫的是OnClickListener(),改為setOnTouchListener()就可以在觸控的時候編輯其他editText的資訊。
  2. 自定義鍵盤顯示後遮住了下排的editText文字框,要想輸入還需要先關閉鍵盤在點選。想要實現鍵盤彈出自動上升,不遮擋功能。部落格大佬寫的好像都是解決系統自帶鍵盤遮住文字框的問題,沒找到合適方案,不過這個部落格很具有參考價值。http://www.cnblogs.com/loaderman/p/6912736.html    想了個笨方法,將TableLayout外巢狀一個LinerLayout,外面加上ScrollView。將ScrollView和鍵盤以及showText按照layout_weight佔比方式,算出ScrollView在鍵盤和showText顯示時候所佔螢幕的高度大小,然後效果是鍵盤顯示時候能手動滾動ScrollView裡面的TableLayout,然後輸入,但是沒有實現自動上升。解決辦法是是將scrollView物件與佈局繫結,if(點選的是會被擋住的editText)則呼叫下面語句,將scrollView自動滑上去。
scrollView.fullScroll(ScrollView.FOCUS_DOWN)

         佈局時候注意layout_gravitygravity的區別和生效條件。

相關推薦

andriod 定義鍵盤解決遮擋文字問題

       首先建立鍵盤框架檔案:numskeys.xml對應的按鍵數字對應相應的ASII碼,按鍵寬度和按鍵高度按照百分比設定。對應按鍵的功能寫在XMLKeysUtils工具類中,對應按鍵功能寫在onKey方法裡,遍歷陣列或者if…else…語句完成。   drawabl

仿美團簡訊驗證碼輸入 + 定義鍵盤

KeyboardDemo 自定義簡訊驗證碼輸入框  + 自定義數字字母軟鍵盤 前段時間做了一個需求,類似驗證碼輸入框,但輸入的優惠碼有數字和大小寫字母,所以就需要用到自定義軟鍵盤,不然總是切換數字與字母太麻煩,使用者體驗不佳。 剛開始想著到網上找一些demo得了,可i

IOS 定義鍵盤功能,修改換行鍵為傳送鍵

IOS專案是使用混合模式開發,在開發聊天功能時;發現軟鍵盤不能像QQ、微信那樣,換行鍵不能變為傳送;網上說是因為輸入框類別導致;嘗試過以後,還是不行;然後想到用IOS native解決; 先說一下,原生APP 設定軟鍵盤換行鍵為傳送鍵: textField.returnKeyType = U

Android定義鍵盤樣式:字母、數字、標點三種切換

第一次寫,直接上程式碼吧: 先看效果圖: 1.在需要的呼叫軟鍵盤的activity_mian.xml中加入鍵盤控制元件 <!--自定義鍵盤控制元件--> <RelativeLayout android:layout_width="fill

定義鍵盤,隨機數字位置鍵盤

簡介 今天在掘金上看了一篇文章,實現自定義軟鍵盤,發現其實實現方式比較簡單,不需要改動系統api,只是單純的載入自己的鍵盤佈局,隱藏系統彈出的鍵盤,實現數字錯位,安全輸入軟鍵盤,記錄一下實現過程用於總結 實現 <?xml version=

Android 定義鍵盤

package com.huyu.test; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import android.app.Activity; import android.input

Android定義鍵盤輸入法,隱藏系統輸入法顯示游標的實現

android實現自定義軟鍵盤,先上圖看效果,效果基本上是仿ios輸入法實現的 這裡是實現隱藏系統輸入法,同時讓EditText能獲取游標的程式碼部分(通過反射呼叫): <span style="font-size:18px;">keyBoardLabe

定義鍵盤 EditText游標問題

自定義軟鍵盤 游標問題 使用自定義鍵盤的時候 為了隱藏系統的軟鍵盤 使用了editText.setInputType editText .setInputType(InputType.TYPE_NULL); 但會導致EditText游標不顯示 不閃爍

Android定義鍵盤KeyboardView 使用例項

在有些應用中會有定製軟鍵盤的需求,往往實現起來會有些難度,或者說實現出來的效果不盡如人意。 最近在專案中有這種需求 博主也是不辱使命地完成了這個需求,效果圖如下 說一下思路的和詳細實現 主要是利用android自帶的android.inputme

Android 定義鍵盤遇到的問題

首先來分析一下軟鍵盤的基本屬性 - 軟鍵盤的實現 - 點選輸入框從底部彈出軟鍵盤 - 彈出軟鍵盤後焦點在輸入框 - 彈出軟鍵盤不遮擋輸入框 軟鍵盤的實現 可以使用KeyboardView也可以自己寫佈局寫點選事件(除特殊情況不推薦)

Android使用xml定義鍵盤效果(附原始碼)

Android使用xml自定義軟鍵盤效果原理: 1,軟鍵盤其實是個控制元件,使用android.inputmethodserver.KeyboardView類定義。 2,主佈局中使用幀佈局,當我們需要顯示軟鍵盤時設定為可見,不需要時設定為不可見。 3,編寫

十一月專案小結(實現定義底部以及適應鍵盤Dialog)

自定義Dialog 自定義CustomDialog繼承父類Dialog //style:自定義Dialog樣式 public CustomDialog(Activity activity , int style) { super(activity,sty

android 定義相機旋轉問題解決照片自動旋轉問題解決

 //自動旋轉180情況下 myCamera = Camera.open(); myCamera .setDisplayOrientation(180); //圖片旋轉180情況下解決方法 par

Spring 和 java 反射定義註解的問題解決!!

我想做一個將  使用者操作記錄儲存到資料庫的功能,利用java 的反射和自定義annotation 來實現,具體程式碼如下: 自定義annotation  類: package com.util; import java.lang.annotation.Documented;

html5定義數字鍵盤

blog this cal pre pan initial class function type 原理:使用div模擬輸入框,避免手機原生鍵盤彈出,鍵盤使用div模擬,點擊事件使用js控制,光標閃爍使用css模擬,具體代碼如下: 1 <!doctype html

nginx定義站點目錄簡單編寫開發網頁內容講解

linux[[email protected]/* */ conf]# egrep -v "^$|#" nginx.conf.default >nginx.conf[[email protected]/* */ conf]# pwd/application/nginx/conf[

ios開發之--仿(微信)定義表情鍵盤

lai signed avi 創建 不能 url div load mps 先附上demo:https://github.com/hgl753951/CusEmoji.git 效果圖如下: 先說下具體的實現功能: 1,本地加載了一些H5的代碼,直接使用webview的lo

GridView+PopupWindow定義數字鍵盤

數字鍵盤public class SimpleGridViewTest extends Activity {EditText editText;private PopupWindow popupWindow;private GridView mGridView;private View contentview

JavaScript中定義函數以文本、radio、下拉的值的獲取,結合淘寶競拍案例來理解。。。

支付寶 價格 select back html alt 文本框 lec 獲取 淘寶競拍案例: HTML部分代碼: <form action="#" method="post"> <h2>歡迎進入淘寶競拍</h2> &l

Django——模板層(template)(模板語法、定義模板過濾器標簽、模板繼承)

num 序列 document 希望 可讀性 數量 AC 自然 同學 前言:當我們想在頁面上給客戶端返回一個當前時間,一些初學者可能會很自然的想到用占位符,字符串拼接來達到我們想要的效果,但是這樣做會有一個問題,HTML被直接硬編碼在 Python代碼之中。