Android 如何使用预先选择的日期使日历视图可见但不可编辑

Android 如何使用预先选择的日期使日历视图可见但不可编辑,android,widget,calendarview,Android,Widget,Calendarview,我想使日历视图可见,但不可编辑,仅显示给具有选定日期的用户。我尝试将“可单击”属性设置为false,但它不起作用。我添加了一个容器视图,然后将clickable属性设置为false,但也不起作用 <CalendarView android:clickable="false" android:id="@+id/calendarView" android:layout_wid

我想使日历视图可见,但不可编辑,仅显示给具有选定日期的用户。我尝试将“可单击”属性设置为false,但它不起作用。我添加了一个容器视图,然后将clickable属性设置为false,但也不起作用

    <CalendarView
            android:clickable="false"
            android:id="@+id/calendarView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

通过从dispatchTouchEvent(MotionEvent ev)返回
true
将解决您的问题

使用此类:

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.CalendarView;

public class CalenderView extends CalendarView {


    public CalenderView(Context context) {
        super(context);
    }

    public CalenderView(Context context, AttributeSet attribute) {
        super(context, attribute);
    }

    public CalenderView(Context context, AttributeSet attribute, int defStyle) {
        super(context, attribute, defStyle);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return true;
    }
}
对于Kotlin,它将是:

 import android.content.Context
 import android.util.AttributeSet
 import android.view.MotionEvent
 import android.widget.CalendarView

 class CalendarView : CalendarView {
    constructor(context: Context?) : super(context!!) {}
    constructor(context: Context?, attribute: AttributeSet?) : super(context!!, attribute) 
    {}
    constructor(context: Context?, attribute: AttributeSet?, defStyle: Int) : 
    super(context!!, attribute, defStyle) {}

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        return true
    }
  }

我做了一个变通方法,用另一个视图包装它,然后控制该视图的单击侦听器这是唯一适合我的解决方案,下面是我的代码:

<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/FL"
                                                   android:layout_width="match_parent"
                                                   android:layout_height="wrap_content">

    <CalendarView android:id="@+id/calendarView"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  app:layout_constraintBottom_toBottomOf="parent"
                  app:layout_constraintEnd_toEndOf="parent"
                  app:layout_constraintStart_toStartOf="parent"
                  app:layout_constraintTop_toTopOf="parent" />

        <View android:id="@+id/empty"
              android:layout_width="409dp"
              android:layout_height="336dp"
              android:background="@android:color/transparent"
              android:elevation="16dp"
              app:layout_constraintBottom_toBottomOf="@id/calendarView"
              app:layout_constraintEnd_toEndOf="@id/calendarView"
              app:layout_constraintHorizontal_bias="1.0"
              app:layout_constraintStart_toStartOf="@id/calendarView"
              app:layout_constraintTop_toTopOf="@id/calendarView"
              app:layout_constraintVertical_bias="1.0" />

</androidx.constraintlayout.widget.ConstraintLayout>

显示您的代码。文章已编辑
private fun enableCalendar() {
    empty.setOnClickListener(null)
    empty.visibility = View.GONE
}

private fun disableCalendar() {
    empty.visibility = View.VISIBLE
    empty.setOnClickListener {}
}