【问题标题】:How to cancel focus in EditText when I change DatePicker or TimePicker?更改 DatePicker 或 TimePicker 时如何取消 EditText 中的焦点?
【发布时间】:2016-08-29 15:08:13
【问题描述】:

我有设置文本、日期、时间的 DialogFragment。 当我显示此对话框时,已将注意力集中在 EditText 上。当我在 DatePicker 中设置日期时,将焦点移到 EditText 上。

我尝试向 EditText 添加参数,但没有帮助。无法输入文字。

android:focusable="false"
android:focusableInTouchMode="false"

在我找到一些解决方案后(如果按下“Enter” - 我禁用对 EditText 的关注):

editTextComment.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View view, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                editTextComment.setFocusable(false);
                editTextComment.setFocusableInTouchMode(true);
                return true;
            } else {
                return false;
            }
        }
    });

你能帮我做对吗?谢谢。

XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText
        android:id="@+id/dialog_add_comment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/activity_entrance_horizontal_margin"
        android:hint="@string/dialog_reminder_add_hint_edit_text" />

    <DatePicker
        android:id="@+id/dialog_date_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <TimePicker
        android:id="@+id/dialog_time_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>

JAVA

public class AddReminderDialogFragment extends DialogFragment {

public static final String BROADCAST_ADD_NEW_REMINDER = "BROADCAST_ADD_NEW_REMINDER";
private String dialogTitle;
private String dialogNegativeBtnText;
private String dialogPositiveBtnText;


public static AddReminderDialogFragment newInstanse() {
    return new AddReminderDialogFragment();
}


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dialogTitle = getResources().getString(R.string.add_reminder_dialog_title);
    dialogNegativeBtnText = getResources().getString(R.string.add_reminder_dialog_negative_btn_text);
    dialogPositiveBtnText = getResources().getString(R.string.add_reminder_dialog_positive_btn_text);
}

public Dialog onCreateDialog(Bundle savedInstanceState) {
    LayoutInflater inflater = getActivity().getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.dialog_reminder_add, null);
    final DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.dialog_date_picker);
    final TimePicker timePicker = (TimePicker) dialogView.findViewById(R.id.dialog_time_picker);
    final EditText editTextComment = (EditText) dialogView.findViewById(R.id.dialog_add_comment);
    final Calendar reminderTime = Calendar.getInstance();

    timePicker.setIs24HourView(true);
    editTextComment.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View view, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                editTextComment.setFocusable(false);
                editTextComment.setFocusableInTouchMode(true);
                return true;
            } else {
                return false;
            }
        }
    });

    timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
        @Override
        public void onTimeChanged(TimePicker timePicker, int hour, int minutes) {
            reminderTime.set(Calendar.HOUR_OF_DAY, hour);
            reminderTime.set(Calendar.MINUTE, minutes);
        }
    });

    return new AlertDialog.Builder(getContext())
            .setTitle(dialogTitle)
            .setView(dialogView)
            .setIcon(App.getInstance().getResources().getDrawable(R.mipmap.ic_launcher))
            .setNegativeButton(dialogNegativeBtnText, null)
            .setPositiveButton(dialogPositiveBtnText, null)
            .create();
}

【问题讨论】:

    标签: java android android-edittext focus


    【解决方案1】:

    添加

        android:editable="false"
    

    到您的 EditText (dialog_add_comment) 并尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多