Comments 20
UFO just landed and posted this here
Извините, но ваш вопрос мне кажется не полным. Что с нативным внешним видом не так?
0
Я согласен, что не-гайдлайновые интерфейсы это безусловно не есть хорошо. Но мне кажется, что существующие гайдлайны, например такие, оставляют достаточный простор для творчества и применения тем.
И да, с к сожалению ни кто не застрахован от того что его технология будет не правильно интерпретирована или не правильно применена горе-разработчиками.
И да, с к сожалению ни кто не застрахован от того что его технология будет не правильно интерпретирована или не правильно применена горе-разработчиками.
+2
а чем вас обычный механизм тем/стилей не устроил?
я просто не могу понять, зачем устанавливать отдельный .apk и пользоваться библиотекой, если можно все описать в styles.xml файле?
разве что для загрузки новых тем, не встроенных изначально в приложение
я просто не могу понять, зачем устанавливать отдельный .apk и пользоваться библиотекой, если можно все описать в styles.xml файле?
разве что для загрузки новых тем, не встроенных изначально в приложение
0
Я «обожаю» такой подход: отнаследовались от Activity и радуемся.
Во-первых, вы забыли в своей библиотеке о FragmentActivity, а, во-вторых, это не правильно: composition over inheritance (т.е. в переводе на русский «композиция вместо наследования»).
В качестве примера приведу такие замечательные библиотеки как SherlockActionBar и Roboguice. В обеих авторы наследуются от Activity, ListActivity и т.д., но вот беда — как их использовать вместе? Правильно, написать ещё одну библиотеку RoboSherlock, где уже классы RoboSherlockActivity наследуется от Activity и т.д.
Во-первых, вы забыли в своей библиотеке о FragmentActivity, а, во-вторых, это не правильно: composition over inheritance (т.е. в переводе на русский «композиция вместо наследования»).
В качестве примера приведу такие замечательные библиотеки как SherlockActionBar и Roboguice. В обеих авторы наследуются от Activity, ListActivity и т.д., но вот беда — как их использовать вместе? Правильно, написать ещё одну библиотеку RoboSherlock, где уже классы RoboSherlockActivity наследуется от Activity и т.д.
0
Кстати, я бы не назвал хорошей практикой ловлю NullPointerException (там действительно в недрах Андроида выкидывается? Или вы просто поленились добавить проверку?)
+1
Я тоже не особо люблю такое наследование…
Надо как-то так писать:
Надо как-то так писать:
class MyActivity {
public void onCreate() {
super.onCreate();
onCreate(this);
}
public static void onCreate(Activity activity) {
// всякие хорошие вещи...
}
}
0
чорт, с переводами строки тут проблемы…
0
Спасибо за идею. Думаю с учетом вашего комментария обновленная 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);
}
}
0
Выделите лучше в отдельный класс и используйте как поле уже в клиентском 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);
// ...
}
}
0
Спасибо за замечание. Попробую исправить реализацию что бы наследование от BaseActivity (BaseListActivity, BasePreferenceActivity, ...) не было обязательным условием. Я думаю что для этого мне достаточно сделать класс ActivityManager публично доступным.
+1
Sign up to leave a comment.
Как отделить тему от приложения