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

В качестве примера приведу такие замечательные библиотеки как SherlockActionBar и Roboguice. В обеих авторы наследуются от Activity, ListActivity и т.д., но вот беда — как их использовать вместе? Правильно, написать ещё одну библиотеку RoboSherlock, где уже классы RoboSherlockActivity наследуется от Activity и т.д.
Кстати, я бы не назвал хорошей практикой ловлю NullPointerException (там действительно в недрах Андроида выкидывается? Или вы просто поленились добавить проверку?)
А про какой NullPointerException вы говорите? Действительно возможно просто не хватает проверки.
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 публично доступным.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.