簡體   English   中英

如何使用onBackPressed()顯示()SoftKeyboard可見的活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM