2013-10-25 1 views
0

Я использовал код на this Android developers page, чтобы создать таймер выбора при нажатии кнопки. Тем не менее, я не верю этому. Я ориентирую свое приложение на API 18, а минимум - 10, потому что я хочу поддерживать 2.3 из-за high usage. Минимальный необходимый SDK, похоже, не влияет на проблему (я установил его в 16):Android time picker

Я отлаживаю приложение на своем HTC One S с Android 4.1.2, API 16. Я получаю этот вид выбор времени, но я хочу, чтобы он выглядел современным, как на странице разработчиков Android, связанной ранее.

http://www.b2creativedesigns.com/Tutorials/TimePicker/tutorial_timepicker2.png

Почему использовать этот доисторический ищет выбор времени?

Я создаю диалог, используя следующий фрагмент. Я называю это из FragmentActivity.

DialogFragment newFragment = TimePickerFragment.newInstance(2); 
newFragment.show(getSupportFragmentManager(), "endtime"); 

Это код для TimePickerFragment.

public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 
    private static int id; 

    public static TimePickerFragment newInstance(int _id) { 
     Bundle args = new Bundle(); 
     args.putInt("id", _id); 

     id = _id; 

     TimePickerFragment f = new TimePickerFragment(); 
     f.setArguments(args); 

     return f; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     id = getArguments().getInt("id"); 

     int hour = start/60; // start is a global variable, no problems in these 
     int minute = start % 60; 

     if(id == 2) { 
      hour = end/60; 
      minute = end % 60; 
     } 

     return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); 
    } 

    @Override 
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     System.out.println(hourOfDay + ":" + minute); 
     setTime(id, hourOfDay, minute); 
    } 

} 
+4

Возможно, потому что вы, кажется, используете тему активности без голо. –

+1

Это может быть пользовательский интерфейс TimePicker от HTC. Попробуйте запустить приложение в эмуляторе и посмотрите, что произойдет ... – d3m0li5h3r

+0

@ A - CI использовали http://jgilfelt.github.io/android-actionbarstylegenerator/ для создания простой темы для моего приложения. Моя тема приложений настроена на пользовательскую в файле манифеста, но родительский элемент темы имеет значение '@android: style/Theme.Holo.Light'. – MikkoP

ответ

2

Используйте ContextThemeWrapper явно указать свой Холо на основе темы для Dialog, например

return new TimePickerDialog(
     new ContextThemeWrapper(getActivity(), R.style.YourAppStyleInheritingFromHolo), 
     this, hour, minute, DateFormat.is24HourFormat(getActivity())); 
+0

Удивительная работа! Я дам вам награду, как только смогу! – MikkoP

3

Вам необходимо использовать тему Голо для виджета Holo для работы в вашем приложении. Например:

в своем манифесте, при применении:

android:theme="@style/AppTheme" 

и в ваших Рез/значения Папка:

<style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar"> 
</style> 

при использовании этого в значениях-v11 и ценности-V14:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.NoActionBar"> 
</style> 

Система будет переключаться между Theme.Light и Theme.Holo.Light в зависимости от версии Android на устройство.

+0

Родственник AppBaseTheme настроен на мою собственную тему, родителем которой является android: Theme.Holo.Light – MikkoP

+0

Я только что протестировал это на Galaxy S3 с 4.1 и HTC One 4.2, оба показывают Holo Time Picker. Другие части вашего приложения выглядят старыми? – 2Dee

+0

Каждая другая часть выглядит так, как должна. Я не пытался отлаживать эмулятор, почему мои настоящие устройства не будут в порядке? – MikkoP