动态的改变程序的主题

来源:互联网 发布:网站地图生成器 mac 编辑:程序博客网 时间:2024/04/29 18:09

在这个教程中,我将对android中的主题做一个简短的介绍,用户可以通过点击一个按钮,动态的在程序运行时改变主题。

主题介绍

在android中,“主题”是一种统一定义你的用户界面的简单的方式。从长远来看,定义一个主题不仅可以节省你编写代码的时间,也意味着如果你进行UI调整,紧紧需要在一个地方进行改动。这样做节省了你的时间,降低了人为造成的错误。

主题和风格常常在很多android教程互换使用。为了清晰起见,我们将在本教程中关注主题。它们的区别:

1、  主题是一组格式规则,应用在活动或者程序中。

2、  风格(style)是应用的一个视图中的一组规则。

创建一个自定义主题

在android平台中包括一个预定义的主题,也很容易创建自己的主题,两者之间可以很方便的进行转换。

当你创建一个项目是,Eclipse会在res/values下自动生成styles.xml的文件。你可以在styles.xml文件中定义主题。或者你想将风格和主题分开,可以选择为主题建立一个独立的文件。创建themes.xml文件,你可以右击工程,点击new,选择Android XML File。

不管使用那个文件,以下是具体步骤:

1)  添加<resources>标签:

<resources></resources>


2)  给你的主题添加一个唯一的名字,添加结束标签,如下:

<resources><stylename="BlackTheme" ></style></resources>


3)  定义你的主题的相关属性和值:

<itemname="android:background">#000000</item>

在本教程中,我们将创建两个主题,定义不同的背景颜色和文本颜色:

<resources><stylename="BlackTheme" ><itemname="android:background">#000000</item><itemname="android:textColor">#FFFFFF</item></style><stylename="BlueTheme" ><itemname="android:background">#B0E0E6</item><itemname="android:textColor">#000000</item></style></resources>


创建布局

要检查主题之间是否正常切换,我们将创建一个布局,用来显示文本和背景颜色的变化。我们也会给用户一种切换主题的方式。

打开你的布局文件,输入如下代码:

<?xmlversion="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginTop="14dp"android:text="@string/pick"android:textAppearance="?android:attr/textAppearanceLarge"/><Buttonandroid:id="@+id/blackbutton"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/textView1"android:text="@string/black"/><Buttonandroid:id="@+id/bluebutton"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignRight="@+id/blackbutton"android:layout_below="@+id/blackbutton"android:text="@string/blue"/><EditTextandroid:id="@+id/editText1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView2"android:layout_below="@+id/bluebutton"android:ems="10"android:hint="Name"android:inputType="textPersonName"></EditText><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignRight="@+id/editText3"android:layout_below="@+id/editText3"android:text="@string/agree"/><EditTextandroid:id="@+id/editText3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/editText1"android:ems="10"android:hint="Password"android:inputType="numberPassword"/></RelativeLayout>


保存之后可能会提示有错误,不用管,跟进以下步骤。

定义你的Strings

以下定义布局文件定义的几个字符串。打开res/values/strings.xml,修改如下:

<resources>    <string name="app_name">主题</string>    <string name="black">黑色</string>    <string name="blue">蓝色</string>    <string name="pick">选择颜色</string>    <string name="agree">同意你的条件。</string></resources>


MainActivity.java

现在是重点,打开MainAcitivity(src/com/songsoft/themes),没有的话新建,现在我们来讲解一下。

import android.os.Bundle;importandroid.app.Activity;importandroid.view.View;importandroid.view.View.OnClickListener;


这些是程序需要使用的各种类和接口。其中OnClickListener是响应按钮单击事件。

publicclass MainActivity extends Activity implements OnClickListener{/**活动第一次创建是调用*/@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);themeUtils.onActivityCreateSetTheme(this);setContentView(R.layout.main);//这里调用了OnClickListener,现在,忽略Eclipse抛出的错误。findViewById(R.id.blackbutton).setOnClickListener(this);findViewById(R.id.bluebutton).setOnClickListener(this);}@Override//点击事件publicvoid onClick(View v){switch(v.getId()){//当按钮单击时调用。caseR.id.blackbutton:themeUtils.changeToTheme(this,themeUtils.BLACK);break;caseR.id.bluebutton:themeUtils.changeToTheme(this,themeUtils.BLUE);break;}}}


将主题同时设置黑色和蓝色是不可能的,因此添加break语句。

注意,这一节将抛出大量的错误,我们将在下一节创建themeUtils类来消除这些警告和错误。

创建themeUtils.java

下面是创建我们在MainActivity.java中提到的新类,并创建一些静态方法来支持主题的变化。

打开src/com.songsoft.themes,右键单击,创建一个类,输入名字themeUtils。

如图:

打开这个文件,输入以下代码:

packagecom.songsoft.themes;importandroid.app.Activity;importandroid.content.Intent; public class themeUtils{privatestatic int cTheme;publicfinal static int BLACK = 0;publicfinal static int BLUE = 1;publicstatic void changeToTheme(Activity activity, int theme){cTheme =theme;activity.finish();activity.startActivity(newIntent(activity, activity.getClass())); }publicstatic void onActivityCreateSetTheme(Activity activity){switch(cTheme){default:caseBLACK:activity.setTheme(R.style.BlackTheme);break;caseBLUE:activity.setTheme(R.style.BlueTheme);break;}}}


检查一下

themeUtils创建完成后,点击保存,所有的提示错误消失。

启动模拟器,这里的版本是Android2.3.3。看看效果。

 

感兴趣的同学可以改一下相关代码,添加相关按钮,增加主题。

原创粉丝点击