如何使用预先选择的日期使 calendarView 可见但不可编辑
how to make a calendarView visible but not editable with pre chosen date
我想让日历视图可见但不可编辑,只显示给选定日期的用户 我尝试将可点击属性设置为 false,但没有成功。我添加了一个容器视图,然后将可点击属性设置为 false,但也没有用
<CalendarView
android:clickable="false"
android:id="@+id/calendarView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
通过从 dispatchTouchEvent(MotionEvent ev) 返回 true
将解决您的问题。
使用这个 class:
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 {}
}
我想让日历视图可见但不可编辑,只显示给选定日期的用户 我尝试将可点击属性设置为 false,但没有成功。我添加了一个容器视图,然后将可点击属性设置为 false,但也没有用
<CalendarView
android:clickable="false"
android:id="@+id/calendarView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
通过从 dispatchTouchEvent(MotionEvent ev) 返回 true
将解决您的问题。
使用这个 class:
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 {}
}