ZTheme — это компактная Android-платформа для смены тем оформления, которая динамически загружает APK и заменяет слои View в приложениях, разработанных на основе многоуровневой архитектуры MVP или MVC.
Платформа совместима с виртуальными машинами ART и Dalvik.
ZTheme: пример использования
ZTheme createTheme(String apkPath, Context context);
ZTheme createTheme(String apkPath, String libraryPath, Context context)
mZTheme = ZTheme.createTheme("/sdcard/theme/theme_dark.apk", this);
//создание объекта ZThemeView с использованием рефлексии, здесь передаётся имя класса
IThemeView getThemeView(String className)
IThemeView.getThemeView("com.rxx.ztheme.dark.view.LoginView");
setContentView(IThemeView.getView());
Пример кода Demo: простая реализация на основе MVC
public abstract class ILoginController extends BaseActivity<ILoginView,ILoginController> {
/**
* 登录
*/
public abstract void doLogin();
/**
* Обработка переключения темы
*/
public abstract void doChangeTheme();
@Override
public String getViewTag() {
return PhoneMateViewRelated.TAG_LOGIN;
}
}
public class LoginActivity extends ILoginController {
private int themeIndex = 0;
@Override
protected void zOnCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void doLogin() {
Toast.makeText(this, "doLogin,name:"+mView.getAccountName()+",password:"+mView.getPassword(), Toast.LENGTH_SHORT).show();
}
@Override
public void doChangeTheme() {
if ((themeIndex % 2) == 0) {
zGetApplication().changeTheme(((PhoneMateApplication) zGetApplication()).getLight(), null);
} else {
zGetApplication().changeTheme(((PhoneMateApplication) zGetApplication()).getDark(), null);
}
themeIndex++;
}
}
public abstract class ILoginView extends BaseView<ILoginController>{
public ILoginView(Context context, ZTheme iTheme) {
super(context, iTheme);
}
public abstract String getAccountName();
public abstract String getPassword();
public abstract void showLogin();
public abstract void showInput();
}
public class LoginView extends ILoginView implements View.OnClickListener {
private LinearLayout mLayoutAccount;
private ProgressBar mLoginProgressBar;
private EditText mEditTextAccount;
private EditText mEditTextPassword;
private Button mButtonLogin;
private Button mButtonChange;
public LoginView(Context context, ZTheme zTheme) {
super(context, zTheme);
setContentView(R.layout.activity_login);
mLayoutAccount = (LinearLayout) findViewById(R.id.mLayoutAccount);
mLoginProgressBar = (ProgressBar) findViewById(R.id.mLoginProgressBar);
mEditTextAccount = (EditText) findViewById(R.id.mEditTextAccount);
mEditTextPassword = (EditText) findViewById(R.id.mEditTextPassword);
mButtonLogin = (Button) findViewById(R.id.mButtonLogin);
mButtonChange = (Button) findViewById(R.id.mButtonChange);
mButtonLogin.setOnClickListener(this);
mButtonChange.setOnClickListener(this);
}
@Override
public String getAccountName() {
return mEditTextAccount.getText().toString();
}
@Override
public String getPassword() {
return mEditTextPassword.getText().toString();
}
@Override
public void showLogin() {
mLoginProgressBar.setVisibility(View.VISIBLE);
mLayoutAccount.setVisibility(View.GONE);
}
@Override
public void showInput() {
mLoginProgressBar.setVisibility(View.GONE);
mLayoutAccount.setVisibility(View.VISIBLE);
}
@Override
public ViewType getViewType() {
return ViewType.VIEW_PLUG;
}
@Override
public void onClick(View view) {
if (view == mButtonLogin && mController != null &&
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )