2015-12-23 14 views
5

Sto facendo un'app di calendario e ho riscontrato uno strano problema.
Se non sbaglio aggiungendo una vista calendario al mio layout, dovrei vedere i giorni del mese.
Così ho creato un nuovo progetto in cui l'unica cosa che ho fatto è stata posizionare CalendarView sul mio layout MainActivity.
Il problema è che una volta eseguita l'app posso vedere solo questo e non ci sono errori.CalendarView non mostra i giorni del mese

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

codice XML:

<?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> 

Qualche consiglio cosa fare per rendere più visualizzato correttamente (con le particolari giorni del mese)? Stavo cercando le autorizzazioni da aggiungere a manifest, ma a quanto pare non ne ha bisogno. A proposito, sono perfettamente consapevole del fatto che ho bisogno del livello Api min 11 per usare questo CalendarView.

Modifica: Ci scusiamo per non aver dato abbastanza informazioni, per la causa: mancanza di esperienza e il mio cattivo inglese mi sta limitando.

+0

Non è chiaro cosa si sta tentando di fare. Si prega di essere più specifici. –

+0

Aggiungere il layout XML contenente CalenderView –

+1

Non utilizzare wrap_content per altezza e larghezza. Usa invece match_parent per entrambi. Nonostante ciò, se si riscontrano problemi, utilizzare un'altezza di 320 dpi. Si presenterà almeno, ma è un peccato che dobbiamo farlo in questo modo. –

risposta

1

Ho lo stesso problema, per quanto ho capito, ha a che fare con la versione API.
La vista di progettazione mostra la versione 23 dell'API, mentre il telefono/emulatore è inferiore, < 20.
Non sono sicuro che sia possibile correggerlo.

Provate ad usare invece, DatePicker, l'aggiunta di queste due righe:

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

Ma il divertimento non si ferma qui, la funzione onDateChanged non è rimessa in Android 5.0 per DatePicker ... in modo da avere entrambi e rimuovere l'irrilevante è quello che ho fatto per supportare ogni possibilità.

2

Dopo più di un anno probabilmente hai trovato una soluzione o hai usato qualcos'altro per sbarazzarti del problema. Ma mentre stavo cercando cose diverse per liberarmi di questo strano problema, sono riuscito a scoprire cosa sta succedendo.

A partire da API 20, CalendarView è stato rinnovato e si presenta come nella schermata del designer. E 'ancora il caso della più recente API 25.

Ma per API 19 (e abbassare suppongo), sembra completamente diverso:

CalendarView for Android 4.4 (API 19)

E per quanto stupido come sembra, il problema deriva dal layout axml. Questo calendario non è assolutamente in grado di gestire il parametro wrap_content per l'altezza del calendario. Mettere qualsiasi valore in pixel o dp risolverà il problema.

Allora, che cosa si può fare è aggiungere questo nel codice per modificare l'altezza della visualizzazione del calendario per l'API 19 e inferiore (sto usando Xamarin quindi è C#, ma può essere facilmente tradotto in java):

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

Ha risolto il problema per me. Purtroppo questo tipo di cose è frequente tra API 19 e API superiori.Vorrei abbandonare completamente il supporto per questa API e ridurre, ma secondo le statistiche di Android, c'è ancora il 17% di dispositivi funzionanti su Android 4.4 .. Dovremo affrontarlo suppongo.

+0

Puoi farlo sul tuo layout per esempio con: android: minHeight = "300dp" – iLandes

+0

questo mi ha aiutato molto. sto usando 4.4 e il mio livello minimo di API è 15. Grazie mille @ Yume Yume ... :-) – Rumit

Problemi correlati