Pull to refresh

Comments 20

UFO just landed and posted this here
Извините, но ваш вопрос мне кажется не полным. Что с нативным внешним видом не так?
UFO just landed and posted this here
Ну приложение может же быть например ланчером, кастомизация вида которого как раз очень важна пользователю…
UFO just landed and posted this here
ну почему же? в играх тоже довольно полезно.
Я согласен, что не-гайдлайновые интерфейсы это безусловно не есть хорошо. Но мне кажется, что существующие гайдлайны, например такие, оставляют достаточный простор для творчества и применения тем.
И да, с к сожалению ни кто не застрахован от того что его технология будет не правильно интерпретирована или не правильно применена горе-разработчиками.
а чем вас обычный механизм тем/стилей не устроил?
я просто не могу понять, зачем устанавливать отдельный .apk и пользоваться библиотекой, если можно все описать в styles.xml файле?
разве что для загрузки новых тем, не встроенных изначально в приложение
Да, именно для загрузки новых тем, не встроенных изначально в приложение.
Я «обожаю» такой подход: отнаследовались от Activity и радуемся.
Во-первых, вы забыли в своей библиотеке о FragmentActivity, а, во-вторых, это не правильно: composition over inheritance (т.е. в переводе на русский «композиция вместо наследования»).

В качестве примера приведу такие замечательные библиотеки как SherlockActionBar и Roboguice. В обеих авторы наследуются от Activity, ListActivity и т.д., но вот беда — как их использовать вместе? Правильно, написать ещё одну библиотеку RoboSherlock, где уже классы RoboSherlockActivity наследуется от Activity и т.д.
Кстати, я бы не назвал хорошей практикой ловлю NullPointerException (там действительно в недрах Андроида выкидывается? Или вы просто поленились добавить проверку?)
А про какой NullPointerException вы говорите? Действительно возможно просто не хватает проверки.
ThemeManager, строка 22
Там же, строка 114
NullPointerException в недрах Андроида не выкидывается. Скорее всего проверка у меня осталась еще с момента разработки поскольку сейчас вообще ни какого NullPointerException там быть не может.)
Я тоже не особо люблю такое наследование…
Надо как-то так писать:
class MyActivity { public void onCreate() { super.onCreate(); onCreate(this); } public static void onCreate(Activity activity) { // всякие хорошие вещи... } }
чорт, с переводами строки тут проблемы…
Спасибо за идею. Думаю с учетом вашего комментария обновленная BaseActivity будет выглядеть следующим образом:

package com.mera.detachedthemeslib;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;

public abstract class BaseActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		onCreate(this);
		super.onCreate(savedInstanceState);
	}
	
	@Override
	public Resources getResources() {
		return getResources(this, super.getResources());
	}

	@Override
	public Resources.Theme getTheme() {
		return getTheme(this, super.getTheme());
	}
	
	public static void onCreate(Activity activity) {
		ActivityManager.setThemeForActivity(activity);
	}
	
	public static Resources getResources(Activity activity, Resources superResources) {
		return ActivityManager.getResourcesForActivity(activity, superResources);
	}
	
	public static Resources.Theme getTheme(Activity activity, Resources.Theme superTheme) {
		return ActivityManager.getThemeForActivity(activity, superTheme);
	}
}
Выделите лучше в отдельный класс и используйте как поле уже в клиентском Activity:
interface ThemeHelper {

    void onCreate(@NotNull Activity activity);

    @NotNull
    Resources getResources(@NotNull Activity activity);

}


Использование:

class MyActivity extends RoboSherlockActivity {

    @NotNull
    private final ThemeHelper themeHelper = new ThemeHelper();

    @Override
    void onCreate(Bundle savedInstanceState) {
        themeHelper.onCreate(this);

        super.onCreate(savedInstanceState);

        // ...
    }

}

Я согласен что так будет лучше. Сделаю соответственно так при обновлении кода.
Спасибо за замечание. Попробую исправить реализацию что бы наследование от BaseActivity (BaseListActivity, BasePreferenceActivity, ...) не было обязательным условием. Я думаю что для этого мне достаточно сделать класс ActivityManager публично доступным.
Only those users with full accounts are able to leave comments. Log in, please.