簡體   English   中英

CalendarView不顯示該月的日期

[英]CalendarView not showing days of the month

我正在做一個日歷應用程序,我遇到了一個奇怪的問題。
如果我沒有錯,在我的布局中添加CalendarView應該讓我看看這個月的日子。
所以我做了一個新項目,我唯一做的就是將CalendarView放在我的MainActivity布局上。
問題是,一旦我運行應用程序,我只能看到這個並且沒有錯誤。

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代碼:

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

任何建議如何正確顯示(與該月的特定日期)? 我一直在尋找添加到清單的權限,但顯然它不需要任何權限。 順便說一句,我完全知道我需要最小Api等級11來使用這個CalendarView。

編輯:很抱歉沒有給你足夠的信息,原因是:缺乏經驗,我的英語不好限制了我。

經過一年多的時間,您可能找到了解決方案或使用其他方法解決問題。 但是當我嘗試不同的東西擺脫這個奇怪的問題時,我設法找出發生了什么。

從API 20開始,CalendarView得到了更新,看起來就像在設計器截圖中一樣。 最新的API 25仍然如此。

但對於API 19(我認為更低),它看起來完全不同:

適用於Android 4.4的CalendarView(API 19)

而且看起來很傻,問題來自於axml布局。 此日歷絕對無法處理日歷高度的wrap_content參數。 以像素或dp放置任何值都可以解決問題。

所以,你可以做的是在你的代碼中添加這個來改變API 19及更低版本的日歷視圖的高度(我使用的是Xamarin,所以它是C#,但它很容易被翻譯成java):

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

它解決了我的問題。 遺憾的是,這種事情經常發生在API 19和更高版本的API之間。我會放棄完全支持這個API並降低但是根據Android統計數據,Android 4.4上仍然有17%的工作設備。我們將不得不處理我想。

我有同樣的問題,據我所知,它與API版本有關。
設計視圖顯示API版本23,而您的手機/模擬器較低,<20。
我不確定這是否可以修復。

嘗試使用DatePicker,添加以下兩行:

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

但樂趣並沒有就此止步,在Android 5.0中沒有為datePicker調用onDateChanged函數......所以要同時刪除不相關的函數是我為支持所有可能性而做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM