Как я могу отключить представление editText в DatePickerDialog? - PullRequest
0 голосов
/ 15 мая 2018

Я хотел бы отключить поведение EditText на DatePickerDialog, когда для темы установлено значение theme_traditional

enter image description here

public class M3DatePickerDialog extends DialogFragment {

    private DatePicker mDatePicker;
    private OnDatePickerInteractionListener mListener;

    public static M3DatePickerDialog newInstance() {
        return new M3DatePickerDialog();
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.dialog_m3_date_picker, container, false);

        mDatePicker = (DatePicker) rootView.findViewById(R.id.datePicker);
        mDatePicker.setDescendantFocusability(android.widget.DatePicker.FOCUS_BLOCK_DESCENDANTS);
        mDatePicker.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return true;
            }
        });

        Button setDate = (Button) rootView.findViewById(R.id.datePickerSet);
        setDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mListener != null) {
                    mListener.onDateChanged(mDatePicker.getYear(), mDatePicker.getMonth() + 1, mDatePicker.getDayOfMonth());
                }
                getDialog().dismiss();
            }
        });

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        if (this.getDialog().getWindow() != null) {
            this.getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mListener = null;
    }

    public void registerListener(OnDatePickerInteractionListener onDatePickerInteractionListener) {
        mListener = onDatePickerInteractionListener;
    }

    public interface OnDatePickerInteractionListener {
        void onDateChanged(int year, int monthOfYear, int dayOfMonth);
    }
}

1 Ответ

0 голосов
/ 16 мая 2018

Ну, я сделал демо с AlertDialog и оно работает нормально.Нет больше сфокусированных детей.

AlertDialog.Builder builder = new AlertDialog.Builder(DemoActivity.this);
            View view=LayoutInflater.from(DemoActivity.this).inflate(R.layout.temp,null);
            builder.setView(view);
            builder.setTitle("Pick");
            DatePicker datePicker=view.findViewById(R.id.dp);
            datePicker.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
            builder.setPositiveButton("Set", (dialog, which) -> {

            });
            builder.setNegativeButton("Cancel", (dialog, which) -> {

            });
            AlertDialog dialog = builder.create();
            dialog.show();

И xml - это

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<DatePicker
    android:id="@+id/dp"
    android:layout_width="match_parent"
    android:calendarViewShown="false"
    android:datePickerMode="spinner"
    android:layout_height="wrap_content">
</DatePicker>

Ну, я не могу проверить на Gingerbread (Не могу путешествовать во времени в прошлом).Так что его тестировали на Android Oreo.Посмотрите, работает ли это как ожидалось на Gingerbread.

...