Android中的主题(theme)和样式(style)

Android开发之Theme、Style探索及源码浅析 @color/colorAccent 看着木有,它活生生的继承了Theme.AppCompat.Light.DarkActionBar这个style,这玩意又在framework的support v7包下res的themes.xml文件中,具体如下:哈哈,原来如此,这里的Theme.Light你应该十分熟悉了吧(这就是以前我们App用的不是Support包,而是默认的时候,theme默认就是这玩意哈),这玩意就在framework的base下的themes.xml中定义着呢(所以通过了android:进行引 阅读详情
在Android客户端开发中,往往要给用户一些很好的体验,那么就要用到主题和样式,可以用主题和样式来统一管理界面和UI组件。使组件和界面产生一些想要的效果。

一、主题和样式定义:

1、主题(Theme):主题只能针对Activity来说,不能给一个组件设置主题。主题就是包含一种或多种的格式化属性的集合,我们可以为一个Activity设置专门的theme,也可以为所有的Activity设置theme。

2、样式(Style):样式是组件的样式,比如给一个按钮设置宽、高、字体大小等。统一管理,其实样式就相当于java中的封装,就是把相似的属性封装在一个xxx.xml文件中,以便能很好的复用。比如:两个TextView的布局

<TextView
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:padding="8dp"
    	android:text="聊天"
    	android:textColor="#fff"
    	android:textSize="18sp" />
                
<TextView
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	ndroid:padding="8dp"
    	android:text="你好"
    	android:textColor="#fff"
    	android:textSize="18sp" />

其中两个TextView中除了text属性不一样以外,其它的一样,所以我们就可以把公共部分抽出来写一个成一个style,以便复用。
主题和样式都是资源,我们可以使用Android系统中默认的主题和样式,也可以自定义主题和样式来满足我们实际开发中的需求。

二、主题和样式的创建步骤:(自定义主题和样式)
1、在res/values文件夹下建立一个styles.xml文件,增加一个<resource></resource>根结点。
2、在<resource>结点下可以建立一个或多个<style></style>结点,style结点中指定了全局且唯一的一个名字,当然也可继承父类的属性。如:<style name="xxx" parent="android:Theme.Dialog"> 就是一个继承了系统的窗口风格名叫xxx的一个主题.
3、在<style></style>中定义一个或多个<item></item>,每一个item定义了一个名字(属性)和这个属性所对应的值。如:<item name="android:textSize">18sp</item>,就指定了文本字体大小为18sp。
4、接下来就可以其它的xml文件中使用自定义的样式或主题了。(只能在Manifest中指定主题)。
举一个自定义样式的例子:就拿上面两个TextView为例,有res/vaules下建立一个styles.xml文件
<style name="MyTextView">
	    <item name="android:layout_width">wrap_content</item>   <!-- 宽度 -->
	    <item name="android:layout_height">wrap_content</item>  <!-- 高度 -->
	    <item name="android:padding">8dp</item>                 <!-- 内间距 -->
	    <item name="android:textColor">#fff</item>              <!-- 字体颜色 -->
	    <item name="android:textSize">18sp</item>              <!-- 字体大小 -->
	</style>

以上就定义了一个TextView的样式,我们在使用的时候只需要使用style属性引入即可:
<TextView
    	style="@style/MyTextView"  <!--  一句话就可以引入样式了 -->
    	android:text="聊天"
 />

效果和上面聊天的TextView一模一样。这样我们也可以很方便的写第二个TextView了。

三、一个实际的例子(对话框形式的activity)

1、效果图:看起来像一个popupWindow 其实是一个activity

未点击之前:                                                    点击之后:

           

废话不多说了,直接上代码。 点击之前的界面布局。

二、界面布局:

Mainactivity 

 activity_main.xml 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="#cceedd">

   <RelativeLayout 
  			android:layout_width="fill_parent"
  			android:layout_height="45dp"
  			android:id="@+id/title" 
  			android:background="@drawable/title_bar"
  			android:gravity="center_vertical"  >  
  			
            
      		<TextView
        		android:layout_width="wrap_content" 
        		android:layout_height="wrap_content" 
        		android:text="微信"
        		android:layout_centerInParent="true"
        		android:textSize="20sp"		
				android:textColor="#ffffff" /> 
			<ImageButton 
			    android:id="@+id/right_btn"
			    android:layout_width="67dp" 
        		android:layout_height="wrap_content"
        		android:layout_alignParentRight="true" 
        		android:layout_centerVertical="true"
        		android:layout_marginRight="5dp"
        		android:src="@drawable/title_btn_function"
				android:background="@drawable/title_btn_right"
				android:onClick="btnmainright"
			    />      
		</RelativeLayout>

</RelativeLayout>
点击之后是跳到一个新的Acitivity了,只是这里指定了主题,以对话框的形式弹出。


以上界面布局:

DialogActivity

dialogactivity.xml

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"   
   >
   
   <RelativeLayout
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"  
       android:layout_marginTop="46dp">
        
    	<LinearLayout
    	    android:id="@+id/main_dialog_layout"
	      	android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:layout_alignParentRight="true"
        	android:layout_alignParentTop="true"
        	android:orientation="vertical"
        	android:background="@drawable/title_function_bg" >

    		<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" >

    			<ImageView
    			    android:id="@+id/imageView1"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginLeft="8dp"
    			    android:src="@drawable/mm_title_btn_compose_normal" />

    			<TextView
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="发起聊天"
    			    android:textColor="#fff"
    			    android:textSize="18sp" />    		    
    		</LinearLayout>
    		<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" >

    			<ImageView
    			    android:id="@+id/imageView2"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginLeft="8dp"
    			    android:src="@drawable/mm_title_btn_receiver_normal" />

    			<TextView
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="听筒模式"
    			    android:textColor="#fff"
    			    android:textSize="18sp" />    		    
    		</LinearLayout>
    		<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" >

    			<ImageView
    			    android:id="@+id/imageView3"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginLeft="8dp"
    			    android:src="@drawable/mm_title_btn_keyboard_normal" />

    			<TextView
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="登录网页版"
    			    android:textColor="#fff"
    			    android:textSize="18sp" />    		    
    		</LinearLayout>
    		<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" >

    			<ImageView
    			    android:id="@+id/imageView4"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginLeft="8dp"
    			    android:src="@drawable/mm_title_btn_qrcode_normal" />

    			<TextView
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="扫一扫"
    			    android:textColor="#fff"
    			    android:textSize="18sp" />    		    
    		</LinearLayout>

       </LinearLayout>

    </RelativeLayout>
</RelativeLayout>

三、指明DialogActivity的主题:在res/values/styles.xml中定义

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="AppTheme" parent="android:Theme.Light" />
  <style name="MyDialogStyleTop" parent="android:Theme.Dialog" >  <!-- 继承桌口布局然后再修改 -->
        <item name="android:windowAnimationStyle">@style/AnimTop2</item>
        <item name="android:windowFrame">@null</item><!--边框-->
        <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
        <item name="android:windowIsTranslucent">true</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--无标题-->
        <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">false</item><!--模糊-->        
     </style>
     <style name="AnimTop2" parent="@android:style/Animation">  
    	<item name="android:windowEnterAnimation">@anim/push_top_in2</item>
        <item name="android:windowExitAnimation">@anim/push_top_out2</item>
   </style>
	
</resources>
其中红色部分引用到了进入和退出的动画。

四、在res/anim/中分别建立push_top_in2.xml和push_top_out2.xml

push_top_in2.xml

<?xml version="1.0" encoding="utf-8"?>
<scale   xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromXScale="1.0"   
        android:toXScale="1.0"   
        android:fromYScale="0"   
        android:toYScale="1.0"   
        android:pivotX="0"  
        android:pivotY="10%"  
        android:duration="200" /> 
push_top_out2.xml

<?xml version="1.0" encoding="utf-8"?>

<scale   xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:fromXScale="1.0"   
        android:toXScale="1.0"   
        android:fromYScale="1.0"   
        android:toYScale="0"   
        android:pivotX="0"  
        android:pivotY="10%"  
        android:duration="200" /> 
以上就基本搞定布局和主题了。下面接下就是给Activity配置主题

在Mainfest.xml文件中配置 DialogActivity的主题

 <activity android:name=".DialogActivity" android:theme="@style/MyDialogStyleTop"></activity>
五、MainActivity代码:

package com.jun.dialogactivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void btnmainright(View view){    //按钮的onclick事件
    	Intent intent = new Intent(this,DialogActivity.class) ;//跳转到DialogActivity界面
    	startActivity(intent) ;
    }
}
DialogActivity代码

package com.jun.dialogactivity;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;


public class DialogActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.dialogactivity) ;
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {   //触摸事件,关闭掉本Activity
		finish() ;
		return super.onTouchEvent(event);
	}
}

以上就完成了一个简单的Activity的主题应用。好了就到这里。



        
Android样式和主题 4、Style样式是可以继承的,通过style标签中的parent属性指定新定义的样式所继承的样式。ActionBar又称之为操作栏,操作栏是Android 系统在3.0以后的SDK中引入的,操作栏的作用是取代标题栏,操作栏和标题栏一样紧挨在状态栏的下方。5、自定义的Style样式继承:可以通过”.“符号进行自定义的属性继承,在继承的基础上,进行属性的自定义修改。6、设计style样式的目的:在复杂多样式的控件使用和项目应用中,保持统一的格式和展现效果,同时降低维护成本。 阅读详情

相关推荐

【机电杂谈2】BLDC和PMSM的特点和区别

在日常生活中,小到电动玩具,大到电动汽车,永磁电机的身影可以说是无处不在。有刷直流电机、无刷直流电机、永磁同步电机由于其结构和输出特定的不同也被应用到不同的场合。如果你经常拆一些玩具和家电,就会看到大量的有刷直流电机和无刷直流电机,而永磁同步电机主要应用在高精度的工业伺服和电动汽车领域。本文就从电机的结构和控制方面,对这几种常见的永磁电机做简单的梳理和归纳。

2936

Android——Theme和Style-由浅入深,全面讲解

Theme和Style-由浅入深,全面讲解

6897

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

主题和样式

主题: 主题的写法和样式的写法是完全一样的 区别是作用范围不同: 样式:作用在某个控件上的  布局中 主题:作用在整个应用程序上的,或者是应用程序里面的activity上的 ,清单文件中修改

wzping435的博客 458

Sony DPT RP1/CP1破解攻略

前言 自己有一台Sony DPT CP1和一台kindle,两个都已经用了很多年。直到最近发现微信读书上经常可以找到一些免费而且不错的书,所以就萌生了在两台机器上使用微信读书的想法。kindle比较容易实现,直接打开内置浏览器,进入微信读书网页版就行了,而Sony的电纸书则只能通过破解+安装微信读书的方式实现。大概弄了两三个小时吧,也遇到了一些问题,所以这里记录一下整个过程,希望能方便后来的使用者。 首先感谢HappyZ, osc_t5nbj8ds。前者是提供公开破解的方法的大神,后者则是解决了我遇到的问题

weixin_43467572的博客 1万+

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2846

Android中Themes(主题)可以理解为应用级别,或者activity级别的样式

1主题和样式的区别 2样式用于某个控件 3主题用于整个activity或整个应用的样式 4在主清单文件中activity中引用或activity中使用 5注意引用样式是activity直接继承Activity如果继承AppCompatActivity会报错 效果图 相关代码 values----styles.xml中

翟浩浩Android专栏 795

TypeError: ‘<=‘not supported between instances of ‘float’and ‘str‘解决方案

本文主要介绍了TypeError: '

weixin_43178406的博客 28万+

Android 、样式和主题的区别

很多人开发Android有一段时间,对样式和主题可能还是理解的不太清楚,最近在看官方文档稍微整理一下样式和主题的区别 样式(Style):可以理解成是针对View或者窗口(Window)设置外观或者格式的一个属性集合;主题(Theme):可以理解成针对Activity或者Application(应用)设置外观或者格式的一个属性集合;主题可以理解成某一种特殊的样式,定义主题和样式都是基于标

Tiger的专栏 4246

【MATLAB代码】基于水声通信(ACOMMS)下的到达时间差(TDOA)定位的AUV自主导航例程,附完整代码

水下AUV导航系统仿真研究 本研究基于到达时间差(TDOA)技术实现了水下自主航行器(AUV)的三维导航仿真系统。系统采用四个声学信标作为定位基准,通过TDOA测量数据迭代求解AUV位置。仿真结果表明: 导航性能:系统能够有效跟踪AUV从起点(30,30,-20)到目标点(70,70,-20)的航行轨迹,定位误差保持在合理范围内。 误差分析:定位误差变化曲线显示系统具有稳定的定位精度,平均误差为0.5米左右。 技术特点:采用两步最小二乘迭代算法求解非线性TDOA方程,提高了定位精度和计算效率。 该仿真系统为

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 320

《HiVT: Hierarchical Vector Transformer for Multi-Agent Motion Prediction》论文阅读之HiVT

目录摘要1.介绍2.相关工作3.方法3.1. 总体框架3.2 场景表示 3.3 分层向量Transformer3.3.1 局部编码器3.3.2 全局交互模块3.3.3 多模态未来解码器3.4 训练4.实验4.1 实验设置4.2 消融研究 4.3. 结果5.结论 准确预测周围交通参与者的未来运动对于自动驾驶车辆的安全至关重要。最近,矢量化方法由于能够捕捉交通场景中的复杂交互而在运动预测领域占据主导地位。然而,现有的方法忽略了问题的对称性并且受到昂贵的计算成本的影响,面临着在不牺牲预测性能的情况

Gavinmiaoc的博客 3340

【Android开发基础】应用界面主题Theme使用方法

主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格。在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类:   •android:theme="@

幻影浪子 8万+

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1084

Android中的样式Style和主题Theme使用示例

Android中的样式Style和主题Theme使用示例

橡果生长记的博客 3219

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android中的样式和主题(style & theme)

一、样式 android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合。如:需要定义字体的颜色和大小。 在CSS中是这样定义的: .maxhis{COLOR:#0000CC;font-siz

wike的专栏 1096

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android指南 - 主题

译者注:theme(主题)和style(样式)是专用术语,下面对这两个词汇不在使用中文词汇。 theme 是安卓的一种机制,用于为应用程序和activity提供一致的样式(style)。样式style规范了组成用户图形接口的一些元素的可视化属性。比如颜色( color),高度,填充,字体尺寸。为了在平台中所有的APP应用之间,提供比较大...

weixin_34092370的博客 79

安卓主题开发java_Android开发 -- UI界面之threme和style

Android系统的themes.xml和style.xml(位于\base\core\res\res\values\)包含了很多系统定义好的style,建议在里面挑个合适的,然后再继承修改。一、threme android中的主题一般用于窗体级别的,用于改变窗体样式1、Theme:它的意思为默认状态,即如果theme这里不填任何属性的时候,默认为Theme1.1、Theme_NoDisplay它...

weixin_31992237的博客 986

Android - Style 和 Theme 的那点儿事

Style and Themes 简介 Android 中,Styles 和 Themes 是很重要的一块,很大程度上影响着应用的美观程度,虽然可能在座的广大程序猿要说“好不好看得看 UI 设计啊,即便不好看我也不背锅”,但是如果不了解 Style 和 Theme,当 UI 提供给你一个漂亮到惊为天人的设计,你却无法在 Android 中将其还原,这岂不是很尴尬。。因此可以说Style 和...

whdAlive 's blog 1431

重新认识一下Android 的Theme与Style

如何正确开发外观样式 | ADS 中文字幕视频 Theme (主题) 与Style(样式)的区别 Android 中的Theme 和 style都是使用 style tag 标签来表示,如下所示 <style name="name"> &lt...

knight康康的博客 1068

Android的xml文件中的theme和style属性的区别与联系;style、declare-styleable、attr这三个标签的区别与联系

Android的xml文件中的theme和style属性的区别与联系;style、declare-styleable、attr这三个标签的区别与联系

cheneasternsun的博客 1399

Android 中的Theme和Style

Android 中的Theme和Style

欸奥维 1297

android 设置风格主题,Android Theme 常见主题风格详解

本文为自己多年来在Android实战开发过程中总结归纳的一些常见问题,现在分享出来希望对初学者有所帮助。目录[1. 什么是Style,什么是Theme?][2. 在定义Theme的时候@符号和?符号有何区别?][3. 怎么通过代码给一个Activity设置主题?][4. AppTheme主题颜色colorPrimary,colorPrimaryDark,colorAccent都是什么的颜色?][...

weixin_28752743的博客 3518

Android 的样式和主题

Android 的样式和主题; 信息来自官网

宇文 875
上一篇: Android总结笔记01:自定义View学习(一)
下一篇: Android总结笔记02:仿百度贴吧楼层回复功能(含表情)
TigerChain
博客等级 码龄14年 15粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值