編輯:關於Android編程
最近准備要做一個項目,需要用到自定義小鍵盤來確保安全,而且還需要精確獲得用戶點擊鍵盤時的落點位置、力度、指尖接觸屏幕的面積等參數。
在寫自定義鍵盤的時候,用到了國內網上的一些代碼,出處是
向先人致敬!
然後發現down下來的代碼用到我的項目時,出現了各種問題:
1.首先,是一打開應用,就會出現彈出的是系統的輸入法鍵盤,而是不自定義鍵盤,這個問題是由於EditText會在應用打開的使用獲得焦點,導致直接彈出系統輸入法,而不是自定義輸入法。解決的辦法是使EditText在應用打開時不獲取焦點,於是我在activity對應的布局文件的全局Layout標簽中加入
android:focusable=true android:focusableInTouchMode=true
那麼在activity運行時,EditText就失去了焦點,系統輸入法也不會彈出。然後對EditText加入觸摸監聽器,當點擊EditText控件時,就響應彈出我們的鍵盤
et.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
int inputback = et.getInputType();
et.setInputType(InputType.TYPE_NULL);
AdvantageKeyboard kb = new AdvantageKeyboard(act,ctx,et);
kb.showKeyboard();
et.setInputType(inputback);
v.performClick();
return false;
}
});
2.點擊時,鍵盤彈出的提示框裡面沒有字體。例如這樣

這是由於顯示的字體時白色,而背景也是白色導致的。後來各種百度,有人說是因為theme的問題,因為我用的是android5.0.1的API,自動生成項目時,生成的activity是直接繼承ActionBarActivity的,直接改theme會導致應該出現秒退現象。如果要改theme就要先改繼承ActionBarActivity為Activity,然後再去改theme,但是我很不喜歡這樣,因為這樣沒有通用性,後來在google了一下外國人的貼子,才了解到這個彈出的東西叫preview,我們可以修改它的布局的。
在我們自定義的KeyboardView中加入android:keyPreviewLayout標簽,加入後如下:
然後在layout文件夾中,新建一個key_preview_layout.xml文件,裡面這樣寫
其中android:background就是我們的提示框的背景顏色,android:textColor是字體顏色,改成你喜歡的就OK了。

3.加入鍵盤的觸摸響應,並記錄點擊的相關信息(力度,接觸面積,落點坐標等)。
我們可以在自定義鍵盤中的構造函數中對keyboardView加入觸摸監聽器,例如這樣寫構造方法。
public AdvantageKeyboard(Activity act, Context ctx, EditText edit) {
this.act = act;
this.ctx = ctx;
this.ed = edit;
kb_letter = new Keyboard(this.ctx, R.xml.qwerty);
kb_number = new Keyboard(this.ctx, R.xml.symbols);
keyboardView = (KeyboardView) this.act.findViewById(R.id.keyboard_view);
keyboardView.setKeyboard(kb_number);
is_nun = true;
keyboardView.setEnabled(true);
keyboardView.setPreviewEnabled(true);
keyboardView.setOnKeyboardActionListener(action_listener);
keyboardView.setOnTouchListener(touch_listener);//加入觸摸監聽器
}
然後new一個我們處理這些數據的監聽器,需要我們“重載”(可能叫“覆蓋”比較合適)OnTouch函數,把采集的數據顯示到Locat上。需要注意的是,這個OnTouch函數假如返回值為true,就代表這個動作已被處理,為false就代表沒被處理,由於後面還有其他函數需要獲得此動作,所以這裡返回false,否則,接下來的對按鍵動作的響應(字體輸出等)將不會發生。
private OnTouchListener touch_listener = new OnTouchListener(){
@Override
public boolean onTouch(View v, android.view.MotionEvent event) {
float pressure, size, rx, ry, x, y, interval;
long time, down_time;
int action = event.getAction();
switch (action) {
case (MotionEvent.ACTION_DOWN):
pressure = event.getPressure();
size = event.getSize();
time = event.getEventTime();
down_time = event.getDownTime();
x = event.getX();
y = event.getY();
rx = event.getRawX();
ry = event.getRawY();
interval = (float) 0.0;
if(is_first_press){
interval = down_time - last_down_time;
}
is_first_press = true;
last_down_time = down_time;
Log.i(!!!!!!!!!,pressure:+String.valueOf(pressure)+
+size:+String.valueOf(size)+
+time:+String.valueOf(time)+
+downtime:+String.valueOf(down_time)+
+x:+String.valueOf(x)+ y:+String.valueOf(y)+
+rx:+String.valueOf(rx)+ ry:+String.valueOf(ry)+
+interval:+String.valueOf(interval)+
);
break;
case (MotionEvent.ACTION_UP):
v.performClick();
break;
case (MotionEvent.ACTION_MOVE):
break;
}
return false;
}
};
android開發教程之ubuntu使用adb連接小米2的步驟和adb調試方法
步驟:分兩步一、usb連接:在Ubuntu掛載使用MTP設備步驟如下:1.將MTP設備連接至PC機2.如果是第一次使用MTP設備需要安裝以下軟件,否則可以跳過此步驟:復制
Android AlertDialog實現分享對話框/退出對話框/下載對話框
一.摘要彈窗通常用於提示用戶進行某種操作,比如:點擊分享按鈕,彈窗分享對話框;雙擊返回按鈕,彈窗退出對話框;下載文件,提示下載對話框等等,分享對話框/退出對話框/下載對話
Android多線程斷點續傳下載
這個月接到一個項目,要寫一個像360助手一樣的對於軟件管理的APP;其中,遇到了一個問題:多線程斷點下載 這個 ,由於之前沒有寫過這方面的應用功能。所以,不免要自學了。然
Android動畫三部曲之一 View Animation & LayoutAnimation
Tween動畫Tween動畫又稱補間動畫。通過對view的位置、大小、透明度、角度的改變來實現動畫效果。補間動畫的基類是Animation。我們通常使用它的直接子類Rot