[英]How to finish() an activity with SoftKeyboard visible with onBackPressed()
我有一個活動,整個屏幕專用於發送一條消息。 作為上半部分的一個EditText,SoftKeyboard始終在下半部分可見。 當我按回時,SoftKeyboard隱藏,我必須再次按回以退出活動。
我正在努力獲得的行為是:當我按下后退按鈕而不是隱藏鍵盤時立即完成活動。 例如,在編寫新推文時,您可以在Twitter應用中找到此行為。
我嘗試覆蓋onBackPressed()函數,但看起來當鍵盤可見時,函數不會被調用。
@Override
public void onBackPressed() {
finish();
}
任何幫助將非常感激!
所以在嘗試了很多東西后,這里有一些有用的東西
SubTelass EditText並覆蓋onKeyPreIme()函數以發送回調。 這是子類的代碼:
OnKeyPreImeListener onKeyPreImeListener;
public void setOnKeyPreImeListener(OnKeyPreImeListener onKeyPreImeListener) {
this.onKeyPreImeListener = onKeyPreImeListener;
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if(onKeyPreImeListener != null)
onKeyPreImeListener.onBackPressed();
Log.d(TAG, "HIDING KEYBOARD");
return false;
}
return super.dispatchKeyEvent(event);
}
public interface OnKeyPreImeListener {
void onBackPressed();
}
然后在您的每個TextView的活動中:
EditTextGraphee.OnKeyPreImeListener onKeyPreImeListener =
new EditTextGraphee.OnKeyPreImeListener() {
@Override
public void onBackPressed() {
Log.d(TAG, "CALL BACK RECEIVED");
MyActivity.this.onBackPressed();
}
};
editText.setOnKeyPreImeListener(onKeyPreImeListener);
新答案:
顯然你沒有收到onBackPressed
回調,但這並不意味着你無法檢測到鍵盤關閉。
使用此處描述的技術: 如何檢查Android中軟件鍵盤的可見性?
你可以檢測鍵盤打開/關閉的時間,所以當鍵盤關閉時你調用finish();
棄用,原始答案:
只需覆蓋活動中的反壓事件:
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
我假設由於軟鍵盤可見,因此edittext具有焦點。 因此,您可以通過在EditText上添加OnEditorActionListener並完成活動來捕獲后退事件。
yourEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP){
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
finish();
}
}
return false;
}
});
你需要擴展EdtText類並實現onKeyPreIme方法。
public class MyEditText extends EditText {
/* Must use this constructor in order for the layout files to instantiate the class properly */
public MyEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event)
{
// do your stuff here.
return true;
}
}
像這樣覆蓋onBackPressed()方法:
@Override
public void onBackPressed() {
hideKeyboard();
finish();
}
對於hideKeyboard()函數,請在Internet上搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.