以前写过一个关于皮肤的换肤思路的博客。但那个里边主要是针对于资源换肤,没有布局换肤的概念。今天实现了一个可以更换布局的换肤实现。
思路还是上篇文章的思路,只是做了一个简单的实现。
代码如下:
package com.test.android.skin.main;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView((View)getResource("main", "layout"));
Button btn = (Button) findViewById(R.id.btn);
btn.setBackgroundDrawable((Drawable) getResource("btn_background", "drawable"));
SqLHelper helper = new SqLHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("id", "3");
values.put("packname", "org.yangzc.package3");
db.insert("skinTab", null, values);
db.close();
db = helper.getWritableDatabase();
Cursor c = db.rawQuery("select * from skinTab", null);
while(c.moveToNext()){
String id = c.getString(c.getColumnIndex("id"));
String packname = c.getString(c.getColumnIndex("packname"));
Log.d("Tag", "Id:"+id + " packname:" + packname);
}
}
private Object getResource(String filename, String defType){
Context myContext = null;
try {
myContext = this.createPackageContext(
"com.test.android.skin.myskin",
Context.CONTEXT_IGNORE_SECURITY);
int id = myContext.getResources().getIdentifier(filename, defType, myContext.getPackageName());
if("drawable".equals(defType)){
return myContext.getResources().getDrawable(id);
}else if("layout".equals(defType)){
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(LAYOUT_INFLATER_SERVICE);
return inflater.inflate(id, null);
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
}
方向一:
这几天看了一下源码,主要是关于Context的东西。理想化的情况是,进入activity之后首先改一下context,这样之后框架就会动态实现换肤功能。追到了ContextThemeWrapper类,本来看到了attachBaseContext方法,以为OK了呢。看到一下代码郁闷了。继续看...
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
分享到:
相关推荐
这里来了解换肤实现及不同方案的差异和使用场合。 一、从功能上划分 1) 软件内置多个皮肤,用户不能修改; 2) 官方提供皮肤下载,用户使用下载的皮肤; 3) 官方提供皮肤制作工具或方法,用户自制皮肤。 二、皮肤定义...
本文将深入探讨如何在.NET环境下,利用C#或VB.NET等语言实现WinForm窗体的换肤功能,让您的应用程序看起来更加现代、吸引人。 首先,了解WinForm窗体换肤的基本原理。WinForm窗体的外观主要由控件的样式和主题决定...
### MIUI主题风格——一种Android系统换肤功能的设计思路 #### 一、引言 随着移动设备的普及和发展,用户体验成为软件开发中的一个重要考量因素。其中,个性化设置,特别是主题风格的定制化服务,越来越受到用户的...
在Android应用开发中,实现apk皮肤文件换肤是一项常见的需求,它可以提高用户的个性化体验,同时降低主程序的维护复杂度。以下是对实现这一功能的详细分析: 首先,我们需要理解Android系统的安全机制。每个APK在...
换肤的基本思路是:创建一套皮肤资源,如位图或PNG图片,用于表示不同控件在不同状态下的外观;然后,在控件绘制时,根据配置文件选择对应的皮肤资源进行绘制。以下是一些关键步骤: 1. **设计皮肤资源**:通常,...
在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 应用程序中结合DevExpress (DEV) 控件实现自定义皮肤换肤功能。WPF是.NET Framework的一部分,提供了丰富的用户界面开发工具,而DevExpress则...
三、具体实现思路 1. 在React组件中,我们可以这样创建主题色选择的HTML部分: ```jsx ${this.state.skinIndex==0?'active':''}`} onClick={this.toggleSkin.bind(this,0)}> ${this.state.skinIndex==1?'active'...
为了实现网站换肤,开发者需要理解前端渲染原理,熟悉CSS层叠和作用域,以及如何通过JavaScript操作DOM。此外,考虑到性能和兼容性,优化资源加载和处理用户选择的速度也至关重要。最后,良好的文档和测试可以帮助...
在这个压缩包中,"其它简易换肤13种"可能表示有13个不同的换肤实现,每个实现都可能采用了不同的方法或策略。这为学习者提供了多角度了解和实践皮肤更换技术的机会。 易语言的换肤功能实现可能涉及到以下几个知识点...
总之,这个压缩包提供了关于Android应用中手指滑动切换页面和主题换肤的实现思路,包括触摸事件处理、主题资源管理和夜间模式切换。通过学习和理解这些代码,开发者可以提升自己的Android开发技能,为用户打造更友好...
首先,我们要理解实现换肤功能的核心思路: 1. **准备皮肤相关的wxss**:创建不同主题的样式表,比如深黑、粉红、橘黄等,将这些样式表引入到`app.wxss`,这样每个页面都可以使用。 2. **动态更改元素的类名或id**...
6. **组件化设计**:为了保持代码的可维护性和复用性,窗体换肤的实现通常会采用组件化的设计思路,将皮肤应用逻辑封装在一个独立的类库中,这样其他项目也可以轻松地引用和使用。 7. **性能优化**:由于窗体换肤...
动态切换主题颜色的实现思路 实现动态切换主题颜色,关键在于在项目中合理运用CSS变量。步骤如下: - **为html根元素设置data-theme属性**:这个属性值根据用户选择的主题动态改变。 - **通过Scss变量使用对应...
总结起来,Webpack构建换肤功能的核心思路包括: 1. 设置多个入口点,每个入口点对应一个皮肤主题。 2. 使用CSS预处理器(如Stylus)定义皮肤变量并导入共享样式。 3. 打包后处理HTML,移除多余JS引用,将皮肤CSS...
以上就是通过在window上加一层半透明的View来实现Android夜间模式的基本思路。实际开发中,开发者还可以结合SharedPreferences存储用户的夜间模式偏好,以及使用Android的AppCompat库的DarkTheme主题来全局实现夜间...
首先,先说一下我最初的思路。 我最初的想法是使用less定义变量,然后通过js来切换变量,通过切换的变量来达到换肤的效果。 我先新建了一个 theme.less文件,代码如下: @theme:@themea; @themea:pink; @themeb:...
jQuery无刷新换肤,实时切换四种网页背景代码,...本实例为想实现无刷新换肤的朋友提供一种思路,因此CSS文件写的比较简单,仅更换了背景色,不过再复杂的换肤,其原理同样是基于此。希望通过本特效让你实现网页换肤。