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。看看效果。

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

  • 相关阅读:
    windows下编译Boost库
    linux下编译Boost库
    CEPH安装教程(下)
    CEPH安装教程(中)
    CEPH安装教程(上)
    nfs使用教程
    iscsi使用教程(下)
    POJ-2096 Collecting Bugs 概率dp
    HDU-3586 Information Disturbing 树形dp+二分
    HDU-1024 Max Sum Plus Plus 动态规划 滚动数组和转移优化
  • 原文地址:https://www.cnblogs.com/hainange/p/6153574.html
Copyright © 2011-2022 走看看