关闭

Android-系统换肤的几种方法

标签: Android换肤
726人阅读 评论(0) 收藏 举报
分类:

Android-系统换肤的几种方法
一 使用Theme进行简单的换肤
1,为不同的皮肤编写不同的Theme,然后在manifest文件的Activity中应用即可

<activity android:theme="@style/MyTheme"></activity>

2,在onCreate中动态的设置setTheme

public class MainActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //设置主题
        setTheme(R.style.AppTheme);
        setContentView(R.layout.layout_portrait);

    }
}

二 改变界面的布局文件来换肤
1,为不同的皮肤编写不同的布局文件

2,加载布局文件

3,重新绑定界面控件

下面是一个横竖屏转换的Demo:
主Activity类:

public class MainActivity extends Activity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState); 
        //初始化状态的竖屏
        setContentView(R.layout.layout_portrait);
        //由打出的log可以判断系统利用onConfigurationChanged转换的时候,不会重新onCreate,只是在第一次
        //的时候onCreate
        log.i("chengzhi log", "onCreate");
    }

    //利用onConfigurationChanged可以提高转换的效率
    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        // TODO Auto-generated method stub
        super.onConfigurationChanged(newConfig);

        //系统状态改变为垂直的时候
        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
        {
            //设置布局为竖屏
            setContentView(R.layout.layout_portrait);

        }
        //系统状态改变为水平的时候
        else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
        {
            //设置布局为水平
            setContentView(R.layout.layout_landscape); 
        }
         //打出log,判断是否正常运行
        Log.i("chengzhi", "onConfigurationChanged");
    }  
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

两个布局文件类:
1,水平布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"   
    android:orientation="horizontal" >
   //四个按钮
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

如下图:
这里写图片描述

2,竖直布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    //下面是四个按钮
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

如下图:
这里写图片描述

manifest文件注册主Activity:

<activity
        android:name="com.example.androidconfigchange.MainActivity"
            android:label="@string/app_name"
            <!--设置configChanges属性为orientation -->
            android:configChanges="orientation" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" /> 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<!--添加权限  -->
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
0
0
查看评论

iOS开发之换肤皮肤设置详细实现_方法调配实现

上次整理了一下通知方法是如何实现换肤功能的,前几天方法调配实现的demo也写好了,上github上找了一个提供夜间模式换肤的第三方框架,思路有相通的地方,比较值得学习。框架名字:DKNightVersion github地址:https://github.com/Draveness/DKNight...
  • braveeee_hu
  • braveeee_hu
  • 2016-10-03 21:21
  • 2453

Qt之界面换肤

简述常用的软件基本都有换肤功能,例如:QQ、360、迅雷等。换肤并没有想象中那么难,其实很简单,利用我们前面分享过的QSS系列文章完全可以实现各种样式的定制!简述 实现原理 效果 新建QSS文件 编写QSS代码 加载QSS 更多参考实现原理 新建多个QSS文件 为各个QSS文件编写对应的样式代码 换...
  • u011012932
  • u011012932
  • 2016-08-31 13:26
  • 11884

Java WEB中基于jQuey 的换肤实现

着个性化社会的发展,现在很多软件都支持换肤功能,允许用户来定制软件的外观。根据使用方式的不同,定制又分为两种: 1、系统管理员定制整个系统的外观,系统管理员来选择一个系统使用什么样的外观,同时不允许用户来定制。 2、每个用户都可以实现定制,并且保存自己的定制 当然上述...
  • LinJiangBieJi
  • LinJiangBieJi
  • 2014-04-24 07:57
  • 1033

使用Xkins为Web应用增加皮肤——为你的Web应用增加换肤能力

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 使用Xkins为Web应用增加皮肤 ——为你的Web应用增加换肤能力
  • rcyl2003
  • rcyl2003
  • 2007-05-21 12:31
  • 735

简单实现DevExpress换肤

简单实现DevExpress换肤
  • paladin1893
  • paladin1893
  • 2016-05-20 21:02
  • 237

Android-存储数据的几种方法

1.Android用Java开发,可以使用全局变量 public String picpath; public String hasfind; public String ProductID="0"; 这种方法适用于程序运行期间,需要多个地方用到的临时值有用 ,比如上传图片的路...
  • chenbo163
  • chenbo163
  • 2015-04-13 21:33
  • 597

android之换肤原理解读

如下是解读demo的链接,自行下载 https://github.com/fengjundev/Android-Skin-Loader 由于是开源的,而且对于想了解换肤功能的童鞋这个demo实在是通俗易懂,原理也很清晰,所以忍不住想要记录一下, 题外话:附上一篇换肤技术总结的博客,这是一篇...
  • zhongwn
  • zhongwn
  • 2016-10-22 17:21
  • 3213

Android 换肤原理分析和总结

Android 换肤资源的概括一个apk文件,实质为为zip文件,而对于Android来说,应用的安装的过程,其实就是一个复制过程,将第三方应用apk文件复制到/data/app目录,只不过中间涉及一些权限的问题。那么就对apk进行分析解压过后文件,
  • zhi184816
  • zhi184816
  • 2016-12-02 17:25
  • 4126

Android ——网络请求框架OkHttp使用

前言 Android系统提供了两种HTTP通信类, 一个是 HttpURLConnection  和 HttpClient . 尽管Google在大部分安卓版本中推荐是使用HttpURLConnection  ,但这个类相比HTTPClient实在是太难用了. OkHttp是一个...
  • zouzhigang96
  • zouzhigang96
  • 2015-11-09 10:08
  • 833

Android QQ技术分享三(QQ换肤之SkinEngine实现)

首先展示截图 原作者:http://blog.csdn.net/cc_want/article/details/49179109 【前言说明】此技术在android QQ2.0之后直到现在的QQ5.9版本也一直在使用,额下来我会详细讲解代码及实现原理,此技术目前百度或者goo...
  • minkowsky
  • minkowsky
  • 2015-10-21 14:35
  • 1892
    个人资料
    • 访问:159520次
    • 积分:3334
    • 等级:
    • 排名:第11987名
    • 原创:209篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    博客专栏
    最新评论