2015-12-23 10 views
5

Ich mache eine Kalender-App und habe ein seltsames Problem festgestellt.
Wenn ich falsch liege, wenn ich eine Kalenderansicht zu meinem Layout hinzufüge, sollte ich die Tage des Monats sehen.
Also machte ich ein neues Projekt, bei dem ich nur das CalendarView auf mein MainActivity-Layout platzierte.
Das Problem ist, dass sobald ich die App ausführen kann ich nur dies sehen und es gibt keinen Fehler.CalendarView zeigt keine Tage des Monats an

package com.example.kanye.kalendarz22; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.CalendarView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 
CalendarView calendar ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    this.initializeCalendar(); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 
public void initializeCalendar() { 
    calendar = (CalendarView) findViewById(R.id.calendarView); 

    calendar.setShowWeekNumber(false); 

    calendar.setFirstDayOfWeek(2); 

    calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { 
     @Override 
     public void onSelectedDayChange(CalendarView view, int year, int month, int day) { 

      Toast.makeText(MainActivity.this, day + "/" + month + "/" + year, Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

http://i.imgur.com/iJsEwCc.png?1

http://i.imgur.com/AdciraO.png?1

XML-Code:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:showIn="@layout/activity_main" tools:context=".MainActivity"> 

<TextView android:text="Hello World!" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView" /> 

<CalendarView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/calendarView" 
    android:layout_below="@+id/textView" 
    android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

Ratschläge, was es zu tun, um richtig zu machen angezeigt (mit den besonderen Tagen des Monats) Ich suchte nach Berechtigungen, die zu Manifest hinzugefügt werden, aber anscheinend benötigt es keine. Übrigens bin ich mir vollkommen bewusst, dass ich die min Api Level 11 brauche, um dieses CalendarView zu verwenden.

Edit: Entschuldigen Sie, dass ich Ihnen nicht genügend Informationen gegeben habe, bei der Ursache: Mangel an Erfahrung und mein schlechtes Englisch schränkt mich ein.

+0

Ist nicht klar, was Sie versuchen zu tun. Bitte sei spezifischer. –

+0

Fügen Sie bitte das XML-Layout mit der Kalenderansicht hinzu. –

+1

Verwenden Sie wrap_content nicht für Höhe und Breite. Verwenden Sie stattdessen match_parent für beide. Wenn Sie Probleme haben, verwenden Sie trotzdem eine Höhe von 320 dpi. Es wird zumindest auftauchen, aber es ist eine Schande, dass wir es so machen müssen. –

Antwort

1

Ich habe das gleiche Problem, soweit ich es verstehe, hat es mit API-Version zu tun.
Die Entwurfsansicht zeigt Ihnen API-Version 23, während Ihr Telefon/Emulator niedriger ist, < 20.
Ich bin mir nicht sicher, ob dies überhaupt behoben werden kann.

Versuchen Sie stattdessen, Datepicker, und fügte hinzu, diese beiden Linien mit:

datePicker.setCalendarViewShown(true); 
datePicker.setSpinnerShown(false) 

Aber der Spaß ist noch nicht alles, die onDateChanged Funktion nicht aufgerufen wird in Android 5.0 für Datepicker ... so haben beide und entfernen Das Irrelevante ist, was ich getan habe, um jede Möglichkeit zu unterstützen.

2

Nach mehr als einem Jahr haben Sie wahrscheinlich eine Lösung gefunden oder etwas anderes verwendet, um das Problem loszuwerden. Aber als ich verschiedene Dinge versuchte, um dieses seltsame Problem loszuwerden, gelang es mir herauszufinden, was passiert.

Ausgehend von API 20 wurde CalendarView erneuert und sieht in Ihrem Designer Screenshot aus. Es ist immer noch der Fall für die jüngsten API 25.

Aber für die API-19 (und senken nehme ich an), es ganz anders aussieht:

CalendarView for Android 4.4 (API 19)

Und so dumm, wie es scheint, das Problem kommt aus dem axml Layout. Dieser Kalender kann absolut nicht den Parameter wrap_content für die Höhe des Kalenders verarbeiten. Wenn Sie einen Wert in Pixel oder dpi eingeben, wird das Problem behoben.

Also, was können Sie tun, ist dies für die API 19 die Höhe der Kalenderansicht zu ändern, in Ihrem Code hinzufügen und untere (ich verwende Xamarin so ist es C# ist, aber es kann leicht zu Java übersetzt):

if (((int)Android.OS.Build.VERSION.SdkInt) <= 19) { 
    var parameters = myCalendarView.LayoutParameters; 
    parameters.Height = 500; //value in pixels 
} 

Es löste das Problem für mich. Leider ist diese Art der Sache häufig zwischen API 19 und höheren APIs.Ich würde die vollständige Unterstützung für diese API aufgeben und niedriger, aber laut Android-Statistiken gibt es immer noch 17% der Arbeitsgeräte auf Android 4.4. Wir werden damit umgehen müssen, denke ich.

+0

Sie können es auf Ihrem Layout für zB mit: Android: MinHeight = "300dp" – iLandes

+0

das hat mir sehr geholfen. Ich benutze 4,4 und meine minimale API-Ebene ist 15. Vielen Dank @Yume Yume ... :-) – Rumit