Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android_EditText

Android_EditText

編輯:關於Android編程

關於鍵盤彈出擋住輸入框的問題

android:windowSoftInputMode 使用這個屬性可以完美解決。
這個屬性的設置將會影響兩件事情: 當有焦點產生時,軟鍵盤是隱藏還是顯示
是否減少活動主窗口大小以便騰出空間放軟鍵盤
這個屬性可以設一個值,或者設兩個值(用豎線隔開)。
例如:
各個值的含義: stateUnspecified:默認設置,軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置
stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity裡的狀態,無論是隱藏還是顯示
stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏(這裡的用戶選擇是指用戶導航到此activity,而不是返回到次activity)
stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的(這裡的獲取焦點包括上面的導航和返回)
stateVisible:和stateHidden相反
stateAlwaysVisible:和stateAlwaysHidden相反
adjustUnspecified:默認設置,沒有指定,通常由系統自行決定
adjustResize:會調整活動主窗口大小以便騰出空間放軟鍵盤
adjustPan:會調整活動主窗口大小以便騰出空間放軟鍵盤。和adjustResize的區別是:adjustResize調整後,其他的空間仍然可以操作;而adjustPan調整後其他空間必須在關閉軟鍵盤後才能操作。所以,adjustPan是不被推薦的屬性。

點擊EditText的以外的區域關閉軟鍵盤

方法1:給最最最外層的父Layout設置點擊事件
  
  
 
加上id和android:clickable=“true” 然後,設置點擊事件
@Override  
public void onClick(View v) {  
    switch (v.getId()) {  
    case R.id.rootview:  
         InputMethodManager imm = (InputMethodManager)  
         getSystemService(Context.INPUT_METHOD_SERVICE);  
         imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
        break;  
    }  
}  

方法2:dispatchTouchEvent方法中,每次ACTION_DOWN的時候,判斷是不是EditText區域,如果不是,關閉軟鍵盤
@Override  
public boolean dispatchTouchEvent(MotionEvent ev) {  
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {  
        View v = getCurrentFocus();  
        if (isShouldHideInput(v, ev)) {  
  
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
            if (imm != null) {  
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
            }  
        }  
        return super.dispatchTouchEvent(ev);  
    }  
    // 必不可少,否則所有的組件都不會有TouchEvent了  
    if (getWindow().superDispatchTouchEvent(ev)) {  
        return true;  
    }  
    return onTouchEvent(ev);  
}

public  boolean isShouldHideInput(View v, MotionEvent event) {  
    if (v != null && (v instanceof EditText)) {  
        int[] leftTop = { 0, 0 };  
        //獲取輸入框當前的location位置  
        v.getLocationInWindow(leftTop);  
        int left = leftTop[0];  
        int top = leftTop[1];  
        int bottom = top + v.getHeight();  
        int right = left + v.getWidth();  
        if (event.getX() > left && event.getX() < right  
                && event.getY() > top && event.getY() < bottom) {  
            // 點擊的是輸入框區域,保留點擊EditText的事件  
            return false;  
        } else {  
            return true;  
        }  
    }  
    return false;  
}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved