android 键盘 自动消失,android 键盘状态,获取键盘显示和隐藏
要設置彈出鍵盤是否覆蓋Activity的view,或者軟鍵盤的顯示隱藏狀態,需要用到Activity的一個屬性:
android:windowSoftInputMode
該屬性在AndroidManifest.xml中設置,如下:
"stateUnchanged",?"stateHidden",
"stateAlwaysHidden",?"stateVisible",
"stateAlwaysVisible",?"adjustUnspecified",
"adjustResize",?"adjustPan"]?……?>
值-----描述
"stateUnspecified"-----軟鍵盤的狀態?(是否它是隱藏或可見?)沒有被指定。系統將選擇一個合適的狀態或依賴于主題的設置。
這個是為了軟件盤行為默認的設置。
"stateUnchanged"-----軟鍵盤被保持無論它上次是什么狀態,是否可見或隱藏,當主窗口出現在前面時。
"stateHidden"-----當用戶選擇該Activity時,軟鍵盤被隱藏——也就是,當用戶確定導航到該Activity時,而不是返回到它由于離開另一個Activity。
"stateAlwaysHidden"-----軟鍵盤總是被隱藏的,當該Activity主窗口獲取焦點時。
"stateVisible"-----軟鍵盤是可見的,當那個是正常合適的時(當用戶導航到Activity主窗口時)。
"stateAlwaysVisible"-----當用戶選擇這個Activity時,軟鍵盤是可見的——也就是,也就是,當用戶確定導航到該Activity時,而不是返回到它由于離開另一個Activity。
"adjustUnspecified"-----它不被指定是否該Activity主 窗口調整大小以便留出軟鍵盤的空間,或是否窗口上的內容得到屏幕上當前的焦點是可見的。系統將自動選擇這些模式中一種主要依賴于是否窗口的內容有任何布局 視圖能夠滾動他們的內容。如果有這樣的一個視圖,這個窗口將調整大小,這樣的假設可以使滾動窗口的內容在一個較小的區域中可見的。這個是主窗口默認的行為 設置。
"adjustResize"-----該Activity主窗口總是被調整屏幕的大小以便留出軟鍵盤的空間
"adjustPan"-----該Activity主窗口并不調整屏幕的大小以便留出軟鍵盤的空間。相反,當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分。這個通常是不期望比調整大小,因為用戶可能關閉軟鍵盤以便獲得與被覆蓋內容的交互操作。
下面就是正題了。目前經手的項目有聊天界面,需要做成類似QQ聊天室當鍵盤顯示的時候表情欄隱藏,(由于個人布局問題導致各種鍵盤監聽事件都沒辦徹底隱藏掉表情欄);思路如下,獲取鍵盤狀態是否顯示。顯示狀態,判斷表情有沒有顯示,如果顯示就隱藏,沒顯示就不做動作。鍵盤消失狀態,點擊表情按鈕,鍵盤消失表情顯示,
第一種房間比較簡單:
InputMethodManager?imm?=?(InputMethodManager)?getSystemService(Activity.INPUT_METHOD_SERVICE);
if(imm.hideSoftInputFromWindow(editText.getWindowToken(),?0))??{
imm.showSoftInput(editText,0);
//軟鍵盤已彈出
}??else??{
//軟鍵盤未彈出
}
但是這種在多布局情況fragment使用眾多的情況好像不好使。
在看第二種 需要自己去定義個布局文件:
package?com.demo.softkeyboard;
import?com.demo.softkeyboard.KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener;
import?android.app.Activity;
import?android.os.Bundle;
import?android.view.View;
import?android.widget.EditText;
import?android.widget.TextView;
/**
*?軟鍵盤監聽Demo
*?@author?qiaoning
*
*/
public?class?SoftKeyboardListenDemoActivity?extends?Activity?{
private?EditText?editText;
KeyboardListenRelativeLayout?relativeLayout;
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
relativeLayout?=?(KeyboardListenRelativeLayout)?findViewById(R.id.keyboardRelativeLayout);
editText?=?(EditText)?findViewById(R.id.editText);
relativeLayout.setOnKeyboardStateChangedListener(new?IOnKeyboardStateChangedListener()?{
public?void?onKeyboardStateChanged(int?state)?{
switch?(state)?{
case?KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://軟鍵盤隱藏
editText.setVisibility(View.VISIBLE);
break;
case?KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://軟鍵盤顯示
editText.setVisibility(View.GONE);
break;
default:
break;
}
}
});
}
}
用法
import?com.demo.softkeyboard.KeyboardListenRelativeLayout.IOnKeyboardStateChangedListener;
import?android.app.Activity;
import?android.os.Bundle;
import?android.view.View;
import?android.widget.EditText;
import?android.widget.TextView;
/**
*?軟鍵盤監聽Demo
*?@author?qiaoning
*
*/
public?class?SoftKeyboardListenDemoActivity?extends?Activity?{
private?EditText?editText;
KeyboardListenRelativeLayout?relativeLayout;
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
relativeLayout?=?(KeyboardListenRelativeLayout)?findViewById(R.id.keyboardRelativeLayout);
editText?=?(EditText)?findViewById(R.id.editText);
relativeLayout.setOnKeyboardStateChangedListener(new?IOnKeyboardStateChangedListener()?{
public?void?onKeyboardStateChanged(int?state)?{
switch?(state)?{
case?KeyboardListenRelativeLayout.KEYBOARD_STATE_HIDE://軟鍵盤隱藏
editText.setVisibility(View.VISIBLE);
break;
case?KeyboardListenRelativeLayout.KEYBOARD_STATE_SHOW://軟鍵盤顯示
editText.setVisibility(View.GONE);
break;
default:
break;
}
}
});
}
}
最后布局文件
android:id="@+id/keyboardRelativeLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:fillViewport="true">
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
最后就是第三種方法,目前就是用這個種方式代替前面兩種:相對簡單
首先需要拿到Activity最外面的layout的布局
final?View?activityRootView?=?findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new?OnGlobalLayoutListener()?{
@Override
public?void?onGlobalLayout()?{
int?heightDiff?=?activityRootView.getRootView().getHeight()?-?activityRootView.getHeight();
if?(heightDiff?>?100)?{?//?如果高度差超過100像素,就很有可能是有軟鍵盤...
...?do?something?here
}
}
});
總結
以上是生活随笔為你收集整理的android 键盘 自动消失,android 键盘状态,获取键盘显示和隐藏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad插件_CAD插件自动标注安装教程
- 下一篇: 从CSV和VCF文件中获取联系人信息