DataPicker在新的API上也看起来像旧的devise

所以问题很简单:

我已经在我的应用程序中集成了DatePicker 。 不是作为一个DialogDatePicker而是作为一个View组件(更确切地说是一个View内部的一个dynamic显示和从我的主FragmentActiviy布局中包含的FrameLayout中删除)。

现在我的问题是,这个DataPicker看起来像这样: 在这里输入图像说明

而不是像这样:

在这里输入图像说明

即使我瞄准更高的API,我也尝试将我的Min SDK设置为16或17,但它也没有任何帮助。

有人知道为什么会发生? 以及如何显示数据选取器的新外观? 最好在老版本的Android上呢?

任何帮助,将不胜感激。

谢谢。

编辑:代码:

DataPickerFragment xml:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="6.5dp" android:paddingTop="6dp" android:paddingRight="8.5dp" android:paddingBottom="8.5dp" android:background="@drawable/date_picker_background"> <DatePicker android:id="@+id/datePicker" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:paddingBottom="40dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/bCancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1.0" android:onClick="buttonCanceDatePickerOnclick" android:text="@string/cancel" /> <Button android:id="@+id/bSave" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1.0" android:onClick="buttonSaveDatePickerOnclick" android:text="@string/save" /> </LinearLayout> </FrameLayout> 

DataPickerFramgnet类:

 public class DatePickerFragment extends Fragment { private Button bSave, bCancel; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.date_picker_fragment_layout, container, false); return rootView; } } 

更新:

Manifast文件:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.emildesign.sgreportmanager" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- Crittercism --> <uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.GET_TASKS"/> <application android:allowBackup="true" android:name="com.emildesign.sgreportmanager.SGRaportManagerAppObj" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> <activity android:name="com.emildesign.sgreportmanager.activities.LoginScrActivity" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.emildesign.sgreportmanager.activities.ReportsTableActivity" android:screenOrientation="landscape"> </activity> <activity android:name="com.emildesign.sgreportmanager.activities.ParametersActivity" android:screenOrientation="landscape"> </activity> <activity android:name="com.crittercism.NotificationActivity"/> </application> 

以及我发现我的问题在哪里,我设置:

 android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 

使我的应用程序全屏幕,这应用了旧的数据select器的风格改变它:

 android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" 

创build以下DataPicker:

在这里输入图像说明

这比以前好,但这仍然不是我要找的结果。

Solutions Collecting From Web of "DataPicker在新的API上也看起来像旧的devise"

设置你的android:targetSdkVersion为11或更高。 这是一个示例应用程序演示这个 。


UPDATE

首先,你的原始DatePicker截图是来自一个黑暗的主题(例如, Theme.Holo ),而你的第二个截图是来自一个轻的主题(例如, Theme.Holo.Light )。

其次, DatePicker文档具有以下开头段落:

这个类是一个selectdate的小部件。 date可以通过年,月,日旋钮或CalendarView进行select。 spinners和日历视图集自动同步。 客户端可以自定义是否只显示纺纱器,或者只有日历视图,或者两者都显示。 也可以自定义date的最小和最大date。

你可以通过android:calendarViewShown (或setCalendarViewShown() )去掉CalendarView 。 当你尝试的时候,你会发现一旦CalendarView消失,你的一年微调将出现。

你必须使用全息主题。

所以,你的主题应该是这样的:

 <style name="AppTheme" parent="@android:style/Theme.Holo"> ... </style> 

回答你的更新

更改

android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"

这是调用设备的默认date和时间select器的一个片段

date_time_layout.xml

  <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > <DatePicker android:id="@+id/datePicker1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:calendarViewShown="false" > <!-- style="@style/date_picker_style" --> </DatePicker> <TimePicker android:id="@+id/timePicker1" android:layout_width="wrap_content" android:layout_height="wrap_content" > </TimePicker> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/dialogCancel" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel" /> <Button android:id="@+id/dialogSet" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="Set" /> </LinearLayout> </LinearLayout> </ScrollView> 

把这个方法放在你的类中,并使用showDateAndTimePicker()来调用它。

 private void showDateAndTimePicker() { final Dialog dialog = new Dialog(this, android.R.style.Theme_DeviceDefault_Dialog); dialog.setContentView(R.layout.date_time_layout); dialog.setCancelable(false); dialog.setTitle("Select Date and Time"); Button set = (Button) dialog.findViewById(R.id.dialogSet); Button cancel = (Button) dialog.findViewById(R.id.dialogCancel); final DatePicker dtp = (DatePicker) dialog .findViewById(R.id.datePicker1); final TimePicker tp = (TimePicker) dialog .findViewById(R.id.timePicker1); set.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Handle Set button dialog.dismiss(); } }); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Handle Cancel button dialog.dismiss(); } }); dialog.show(); } 

您需要使用DialogFragment作为您正在查找的结果:

http://developer.android.com/guide/topics/ui/controls/pickers.html