gpt4 book ai didi

android - 箭去哪儿了?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:12 24 4
gpt4 key购买 nike

编辑/注:我真的需要一个答案,我想继续使用“股票”谷歌 Android API。我已经为此创建了 +100 的赏金,但如果我在接下来的几天内使用股票 API 得到一个简单的解决方案,我将再添加 +100,使其值(value) 200 分。

我正在试验 Android CalendarView 控件。我在 NestedScrollView 中制作了一个带有按钮和 CalendarView 的小应用程序。我把按钮和它的边距做得很大,所以我可以验证滚动是否有效。在运行 Android 6.01 的三星 Galaxy S5 上运行良好。但是在运行 4.2.2 的 Samsung S Duo(这是我的预期目标)上,无法提前月份( 注意月份旁边没有箭头 )

这是运行 Android 6.01 的三星 S5 的屏幕截图

s5 screenshot

这是运行 4.2.2 的三星 Duo 中的一个

S Duo screenshot

content_main.xml 看起来像这样。 . .

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<!-- This linear layout is because the scrollview can have only 1 direct child -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/recordEnd"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginTop="100dp"
android:layout_marginBottom="100dp"
android:gravity="center"
android:text="Record End"/>

<CalendarView
android:id="@+id/thecalendar"
android:layout_width="240dp"
android:layout_height="300dp"
android:minDate="01/01/2016"
android:maxDate="11/30/2016"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>

...在 Android Studio 中的设计 View 显示箭头。我不知道如何调试这个。

最佳答案

来自 Iulian Popescu 的精彩而深刻的解释,我只是想简化它。首先,我想澄清一些事情。

  • 根据 this官方Android开发者链接,CalenderView的准确外观和交互模型小部件可能因操作系统版本和主题而异(例如 Holo 与 Material)。
  • 当 Iulian Popescu 粘贴来自 android.widget.CalendarView 的代码时Android类,你可以看到CalendarViewLegacyDelegate class 负责在 HOLO 的情况下呈现 CalenderView主题和 CalendarViewMaterialDelegate class 负责在 MATERIAL 的情况下呈现 CalenderView主题。我再次发布该代码仅供引用。

  • public CalendarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    final TypedArray a = context.obtainStyledAttributes(
    attrs, R.styleable.CalendarView, defStyleAttr, defStyleRes);
    final int mode = a.getInt(R.styleable.CalendarView_calendarViewMode, MODE_HOLO);
    a.recycle();
    switch (mode) {
    case MODE_HOLO:
    mDelegate = new CalendarViewLegacyDelegate(
    this, context, attrs, defStyleAttr, defStyleRes);
    break;
    case MODE_MATERIAL:
    mDelegate = new CalendarViewMaterialDelegate(
    this, context, attrs, defStyleAttr, defStyleRes);
    break;
    default:
    throw new IllegalArgumentException("invalid calendarViewMode attribute");
    }
    }

  • CalendarViewMaterialDelegate (android.widget.CalendarViewMaterialDelegate) 类我们可以看到 DayPickerView (android.widget.DayPickerView) 类作为容器来渲染我们在 Material 主题中可以看到的日历 View 。在 DayPickerView类(class)ViewPager用于在一页中显示一个月。还有两个ImageButton对于下一个和上一个。由于有两个按钮可以更改月份,因此不会产生任何问题并且在 MATERIAL 中工作正常。主题。

  •     private final ViewPager mViewPager;
    private final ImageButton mPrevButton;
    private final ImageButton mNextButton;


  • 正如我们在 CalendarViewLegacyDelegate 中看到的那样(android.widget.CalendarViewLegacyDelegate) 类,ListView用于在 CalenderView 中显示周列表(垂直滚动) .上一个和下一个没有任何 ImageButton,因为它会垂直滚动。

  • /**
    * The adapter for the weeks list.
    */
    private WeeksAdapter mAdapter;

    /**
    * The weeks list.
    */
    private ListView mListView;


    按此 link Android 开发者网站,我们不应该使用 ScrollViewListView , 因为 ListView照顾自己的垂直滚动。因此,在 HOLO 的情况下主题 CalenderViewScrollView 中使用它时会出现意外行为.

    解决方案:-

    您可以使用下面给定的自定义 ScrollView 类而不是 NestedScrollView类。它将使您的 CalenderViewHOLO 的情况下垂直滚动平滑主题。
    public class VerticalScrollView extends ScrollView{

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

    public VerticalScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
    }

    public VerticalScrollView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    final int action = ev.getAction();
    switch (action)
    {
    case MotionEvent.ACTION_DOWN:
    super.onTouchEvent(ev);
    break;

    case MotionEvent.ACTION_MOVE:
    return false; // redirect MotionEvents to ourself

    case MotionEvent.ACTION_CANCEL:
    super.onTouchEvent(ev);
    break;

    case MotionEvent.ACTION_UP:
    return false;

    default:
    break;
    }

    return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
    super.onTouchEvent(ev);
    return true;
    }
    }

    我希望这会消除你的疑虑。

    关于android - 箭去哪儿了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38233997/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com