Tôi đã tạo chế độ xem tùy chỉnh cho ứng dụng của mình bằng cách mở rộng RelativeLayout
. Nó mở ra như dialog
, bằng cách kéo một ImageView
. Nó có EditTexts
và Buttons
. Tôi đang ghi đè onKeyDown
theo quan điểm của mình vì tôi cần chặn nút quay lại từ chế độ xem này. Nếu chế độ xem tùy chỉnh hiển thị, edittext chưa đạt được tiêu điểm và nếu tôi nhấn nút quay lại, chế độ xem sẽ bị loại bỏ, mong muốn.Android: Xử lý nút Quay lại từ chế độ xem tùy chỉnh
Sự cố phát sinh, khi edittext đạt được tiêu điểm và bàn phím được hiển thị, khi nhấn nút quay lại, bàn phím mềm bị loại bỏ, nhưng nếu tôi nhấn lại nút, thì thay vì loại bỏ chế độ xem tùy chỉnh, super.onKeyDown()
được gọi và tôi thoát ứng dụng của tôi, trong đó tính năng mong muốn là loại bỏ chế độ xem sau khi loại bỏ bàn phím mềm. Tôi đang làm gì sai?
Dưới đây là mã giao diện tùy chỉnh của tôi:
public class AddTransactionView extends RelativeLayout implements View.OnClickListener {
private final String TAG = "AddTransactionView";
private Context context;
private ViewGroup parentView;
private FriendsDAO mFriendsDAO;
private AppPreference mAppPreference;
private ImageLoader imageLoader;
private DisplayImageOptions options;
private CircularImageView friendsImage;
private Button btnIOwe, btnTheyOwe;
private EditText edtTransactionDesc, edtTransactionAmt;
private RelativeLayout relAddTransaction;
private int status;
public AddTransactionView(Context context, View anchorView, int marginTop,
ViewGroup parentView, FriendsDAO mFriendsDAO) {
super(context);
Log.e(TAG, "AddTransactionView constructor");
this.context = context;
this.parentView = parentView;
this.mFriendsDAO = mFriendsDAO;
doInitialization();
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.add_transaction_popup, this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
params.addRule(RelativeLayout.ABOVE, anchorView.getId());
params.setMargins(0, marginTop, 0, 0);
view.setLayoutParams(params);
this.setFocusableInTouchMode(true);
this.requestFocus();
parentView.addView(this);
initializeView(view, mFriendsDAO);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.e(TAG, "onKeyCodeDown");
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.e(TAG, "onKeyCodeDown if");
Log.e(TAG, "onKeyCodeDown else");
dismiss();
return true;
} else {
Log.e(TAG, "onKeyCodeDown default");
return super.onKeyDown(keyCode, event);
}
}
private void dismiss() {
parentView.removeView(this);
}
}
PS: tôi đã không được sử dụng hộp thoại hoặc cửa sổ popup do để thiết kế hạn chế trong ứng dụng của tôi.
Cập nhật 1
Khi bàn phím được đóng lại, tập trung không thay đổi trở lại giao diện tùy chỉnh của tôi. Tôi đã thử câu trả lời được đề xuất bên dưới, nhưng tôi đã tìm ra, android không gửi các sự kiện IME khi bàn phím bị loại bỏ. Có cách nào khác để lấy nét lại tầm nhìn của tôi sau khi loại bỏ bàn phím không?
Cập nhật 2 Ngay bây giờ, tôi thấy rằng onKeyListener của edittext chỉ kích hoạt, sau khi tôi nhấn nút quay lại lần thứ hai, đó là sau khi loại bỏ bàn phím. Đó là lý do tại sao giải pháp bên dưới, không hiệu quả.
Chế độ xem này sẽ hiển thị từ các đoạn. Để chặn nút quay lại từ đoạn, tôi phải thực hiện gọi lại trong hoạt động, điều này sẽ kết thúc với nhiều điều kiện và kiểm tra. Tôi muốn tránh chi phí này, vì vậy tôi cần phải chặn nút quay lại trong chế độ xem tùy chỉnh của mình. Nó sẽ giống như hộp thoại hoạt động trên nút quay lại – Nitish
ok, bạn có thể xử lý việc đóng bàn phím khi nhấn phím khi sử dụng edittext hay không. và yêu cầu tập trung vào bố cục? – RuAware
Tôi đã thử nó trước đó. Khi bàn phím được hiển thị, khi nhấn nút quay lại, bàn phím bị loại bỏ như mong muốn, nhưng nhật ký trong ghi đè của tôi trênKeyDown không hiển thị. – Nitish