zoukankan      html  css  js  c++  java
  • 动态的改变程序的主题

    在这个教程中,我将对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">
    <TextView
    android: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"/>
    <Button
    android: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"/>
    <Button
    android: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"/>
    <EditText
    android: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>
    <TextView
    android: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"/>
    <EditText
    android: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
    {
    /**活动第一次创建是调用*/
    @Override
    publicvoid 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。看看效果。

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

  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/hainange/p/6153574.html
Copyright © 2011-2022 走看看