2016-06-09 2 views
3

Android hat eine CalendarView zurück in API 11 eingeführt. Ich habe es in meiner App implementiert und es scheint in dem Sinne gut zu funktionieren es zeigt einen ganz normal aussehenden Ganzmonatskalender an und ich kann ein Datum auswählen. Es löst das entsprechende Ereignis aus und ich kann das ausgewählte Datum in meinem Code ohne Problem lesen.Android CalendarView kann nicht in einen anderen Monat geändert werden (Samsung S Duos - Android 4.2.2)

screen shot of my CalendarView

Aber ich es aus dem aktuellen Monat nicht voranbringen können! Die Dokumentation sagt

Ein Benutzer durch Abkleben auf sich ein Datum auswählen kann und den Kalender zu einem gewünschten Datum blättern und schleudert.

(die „Taping“ erscheint in der Dokumentation, ich nehme an, es ist ein Tippfehler für „Klopfen“)

ich flinging habe versucht, Streichen, Scrollen und nichts passiert. Muss ich etwas tun, um diese Funktion zu aktivieren?

Meine XML sieht wie folgt aus:

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

    <!-- 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="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <!-- Relative layout for Workorder --> 
     <RelativeLayout 
      android:id="@+id/rellayWorkorder" 
      android:background="#383838" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="30dp" 
      android:layout_marginBottom="2dp"> 
      <TextView 
       android:id="@+id/workorderlabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Work Order:"/> 

      <TextView 
       android:id="@+id/workorderContent" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_margin="2dp" 
       android:gravity="right" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="---workorder---"/> 
     </RelativeLayout> 


     <!-- Relative layout for Required Time 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"></FrameLayout> --> 

     <RelativeLayout 
      android:id="@+id/rellayRequiredTime" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="30dp" 
      android:layout_marginBottom="2dp"> 
      <TextView 
       android:id="@+id/requiredTimelabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Required Time:"/> 

      <TextView 
       android:id="@+id/requiredTimeContent" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_margin="2dp" 
       android:gravity="right" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="--- 00 minutes ---"/> 
     </RelativeLayout> 

     <!-- Relative layout for Time remaining --> 
     <RelativeLayout 
      android:id="@+id/rellayTimeRemaining" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="30dp" 
      android:layout_marginBottom="2dp"> 
      <TextView 
       android:id="@+id/timeremaininglabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Time Remaining:"/> 

      <TextView 
       android:id="@+id/tviewtimeremainingContent" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight="true" 
       android:layout_margin="2dp" 
       android:gravity="right" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="--- 0:00:00---"/> 
     </RelativeLayout> 

     <!-- Linear layout for Record Start/Record End buttons --> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" > 
      <Button 
       android:id="@+id/debulkrecordStart" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="6dp" 
       android:layout_marginRight="4dp" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:onClick="OnSetRecordStartTimeClick" 
       android:text="Record Start"/> 
      <Button 
       android:id="@+id/debulkrecordEnd" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="6dp" 
       android:layout_marginRight="4dp" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:onClick="OnSetRecordEndTimeClick" 
       android:text="Record End"/> 
     </LinearLayout> 

     <!-- Relative layout for Vacuum level --> 
     <RelativeLayout 
      android:id="@+id/rellayvacuumlevel" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="2dp"> 
      <TextView 
       android:id="@+id/vaclabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:text="Vacuum Level (inches Hg):"/> 
      <EditText 
       android:id="@+id/vacleveledit" 
       android:layout_width="120dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight = "true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:inputType="text|textCapCharacters" 
       android:text="vac level" 
       android:layout_marginRight="2dp" 
       android:layout_marginTop="2dp" 
       android:layout_marginBottom="2dp"/> 
     </RelativeLayout> 

     <!-- Relative layout for Vac Gauge Equipment # --> 
     <RelativeLayout 
      android:id="@+id/rlayvacuumGauge" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="2dp"> 
      <TextView 
       android:id="@+id/vacgaugelabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:text="Vac Gauge Equipment #:"/> 
      <EditText 
       android:id="@+id/vacgaugeedit" 
       android:layout_width="120dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight = "true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:inputType="text|textCapCharacters" 
       android:text="equip. #"/> 
     </RelativeLayout> 



     <!-- Relative layout for Calibration Due date --> 
     <RelativeLayout 
      android:id="@+id/rlaycalibdue" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="2dp"> 
      <TextView 
       android:id="@+id/calibduelabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:text="Calibration Due Date:"/> 
      <EditText 
       android:id="@+id/calibdueedit" 
       android:layout_width="120dp" 
       android:layout_height="wrap_content" 
       android:layout_alignParentRight = "true" 
       android:layout_margin="2dp" 
       android:gravity="left" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:inputType="text|textCapCharacters" 
       android:text="mm/dd/yyyy"/> 
     </RelativeLayout> 


     <CalendarView 
      android:id="@+id/debulkcalendar" 
      android:layout_width="match_parent" 
      android:layout_height="240dp" 
      android:minDate="01/01/2016" 
      android:maxDate="11/30/2016" 
      /> 


     <!-- this linear layout is for the debulk override and done buttons --> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" > 
      <Button 
       android:id="@+id/debulkOverride" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="6dp" 
       android:layout_marginRight="4dp" 
       android:onClick="OnResetClick" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Override"/> 
      <Button 
       android:id="@+id/debulkDone" 
       android:layout_width="150dp" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="6dp" 
       android:layout_marginRight="2dp" 
       android:onClick="onDoneBtnClick" 
       android:gravity="center" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Done"/> 
     </LinearLayout> 

    </LinearLayout> 

</ScrollView> 

Edits:
Sorry für die lange XML - in meiner ursprünglichen Posting Ich hatte gerade die Calendar aber jemand das gesamte XML angefordert.

Auch auszuschließen die Möglichkeit, dass es einzigartig für das Gerät sein könnte Ich habe dies auf meinem Samsung S5 (Android 5.0) getestet und habe die gleichen Ergebnisse.

+0

@Artur Gniewowski - nein, das hat nichts zu tun mit es. Bei dieser Frage geht es darum, Ereignisse im Code-Behind zu generieren und zu verarbeiten. Bei meiner Frage geht es um das Verhalten der Benutzeroberfläche. – user316117

+0

Ist es spezifisch für (Samsung S Duos - Android 4.2.2)? Hast du andere Geräte getestet? – mgcaguioa

+0

Können Sie das gesamte XML-Layout posten? – mgcaguioa

Antwort

2

nach meiner Annahme, es ist nicht Scrollen oder Schleudern nur wegen einer scrollbaren Eltern, können Sie es ohne Scroll-Ansicht überprüfen?

, weil ich es getestet mit

<LinearLayout 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
    <CalendarView 
    android:id="@+id/debulkcalendar" 
    android:layout_width="match_parent" 
    android:layout_height="240dp" 
    android:minDate="01/01/2016" 
    android:maxDate="11/30/2016"/> 
</LinearLayout> 

und seine Arbeit perfekt

können Sie NestedScrollView verwenden

NestedScrollView wie Scrollview, aber es unterstützt als sowohl eine verschachtelte Scrollen handeln Eltern und Kind auf beiden neuen und alten Versionen von Android. Verschachteltes Scrollen ist standardmäßig aktiviert.

0

@RBK richtig war, Ihre parentView (ScrollView) stört seine childView (CalendarView), die Ihre CalendarView unscrollable macht. Sie können jedoch Ihre benutzerdefinierte CalendarView erstellen, die die Basisklasse CalendarView erweitert und die onInterceptTouchEvent-Methode außer Kraft setzt, um zu erhalten, was Sie wollen.

Erstellen Sie Ihre individuelle Calendar Klasse:

public class CalendarViewScrollable extends CalendarView { 

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

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

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

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { 
      ViewParent p = getParent(); 
      if (p != null) 
       p.requestDisallowInterceptTouchEvent(true); 
     } 
     return false; 
    } 
} 

Verwenden Sie in Ihrem XML-Layout-Datei:

<com.example.app.views.CalendarViewScrollable 
android:id="@+id/debulkcalendar" 
android:layout_width="match_parent" 
android:layout_height="240dp" 
android:minDate="01/01/2016" 
android:maxDate="11/30/2016" /> 

Referenz von diesem original answer

+0

Ich denke, es ist besser, die eingebaute Klasse wie NestedScrollView zu verwenden, anstatt irgendeine Klasse anzupassen. – RBK

Verwandte Themen