我在ScrollView中使用CalendarView。最小SDK为17,目标sdk为25,编译sdk 25,构建工具版本为25.0.3。 我遇到的问题是滚动。在设备API v23及更高版本上运行此功能似乎正常,但对于需要激活ScrollView时的较低API,无法将日历滚动到另一个月。
从我所看到的情况来看,似乎可以通过在ScrollView垂直滚动时使Calendar平滑滚动来修复API v23中的问题。使用带有v22的设备,它们都垂直滚动,因此当需要激活ScrollView时,CalendarView的滚动到另一个月不起作用。至少那是我的样子。
在我为此找到修复程序的努力中,似乎用户@Joel在以下帖子中提供的答案通过提供自定义ScrollView来修复此问题:
HorizontalScrollView within ScrollView Touch Handling
我很惊讶,在这段时间之后,Android团队还没有在v22和之前修复过它。原始修复程序由上述用户于2010年4月16日发布。
虽然我很高兴上述SO帖子已经解决了这个问题,但还有其他原生方法可以解决这个问题吗?我唯一真正关心的是自定义ScrollView可能无法为所有可能的情况提供解决方案。我只实现了自定义ScrollView for API v22及更低版本,对于API v23及更高版本,我使用了本机ScrollView。
编辑:按要求添加示例。好在第23节及以上 但是,在v22模拟器中,Landscape无法更改月份
package boh3.com.testcal001;
导入android.os.Bundle; import android.support.v7.app.AppCompatActivity;
公共类ActivityMain扩展了AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/colorPrimary"
app:tabGravity="fill"
app:tabMode="fixed" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lay_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tabs"
android:orientation="vertical">
<!-- Selected Date -->
<TextView
android:id="@+id/txv_date_and_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:lines="1"
android:padding="4dip"
android:text="This is Some Text"
android:textSize="18sp"
android:textStyle="bold" />
<!-- TIME UNTIL DATE AND TIME -->
<TextView
android:id="@+id/txv_remaining_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txv_date_and_time"
android:gravity="center_horizontal"
android:lines="1"
android:padding="4dip"
android:text="This is some more text"
android:textColor="@color/colorAccent"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lay_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lay_detail"
android:layout_marginBottom="65dip"
android:layout_marginTop="10dip"
android:orientation="vertical">
<ScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/lay_fragment"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_gravity="top|center"
android:layout_marginBottom="0dip"
android:layout_marginTop="0dip"
android:layout_weight="1"
android:orientation="vertical">
<CalendarView
android:id="@+id/date_picker"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbarAlwaysDrawVerticalTrack="false"
android:layout_marginBottom="25dip"
android:isScrollContainer="true"
android:scrollbarAlwaysDrawHorizontalTrack="true"
android:orientation="horizontal"
android:textSize="12sp" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:layout_alignParentBottom="true"
/>