Android 组件样式定制方法详解

前言

android中有很多现成的组件可以使用,但是android上面的程序很多时候用系统自带的组件都不太合适,主要是样式可能不是我们想要的。这个时候我们就需要定制一些样式。本文将讲解如何修改组件的样式。

1、默认样式。

在修改组件的样式之前,我们还是先了解一下组件默认的样式,如下:

当然还有很多的组件,这里就简单的列举一下就可以了。从上面的默认组件可以看出这些组件的样式和你的app的风格不一致。那么这个时候你可能需要做的就是更改组件的样式。(本人觉得默认样式基本上都比较丑,基本上每个app中都需要定制样式)。

2、默认样式文件。

先看看这些组件的样式到底是放在哪里的。\android-sdk-windows\platforms\android-9\data\res\values 里面有两个比较重要的文件:themes.xml 和styles.xml,这两个文件就是样式文件(主题也是样式)。你可以打开styles.xml看看,这里就是系统组件的默认样式。

3、定制样式文件。

我们更关心如何定制样式文件。最简单的方法是参考上面所说到的默认的样式文件然后进行修改。当然你也可以google上搜一些如何修改,不过个人觉得网上讲如何修改的都只给一个实例而已,具体的思路并没有给出。授之于鱼不如授之以渔。

4、样式实例。

4.1 默认样式

我们的实例就选择RadioButton。相信你已经看到过它的默认样式。

看看默认的样式文件:

<style name="Widget.CompoundButton.RadioButton">
    <item name="android:background">@android:drawable/btn_radio_label_background</item>
    <item name="android:button">@android:drawable/btn_radio</item>
</style>

可以看出它其实就有两个重要的样式,一个是background一个是button。

①background。

\android-sdk-windows\platforms\android-9\data\res\drawable-mdpi\btn_radio_label_background 是一张.9图片。(如果你对.9图不是很熟悉,那么参考我的相关博文)。如图:

(这是透明图标,四周的黑色边框是预览区域)。

②button。

首先找到\android-sdk-windows\platforms\android-9\data\res\drawable\btn_radio。这并不是图片,而是xml文件。里面的内容如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:state_window_focused="false"
     android:drawable="@drawable/btn_radio_on" />
  <item android:state_checked="false" android:state_window_focused="false"
     android:drawable="@drawable/btn_radio_off" />

  <item android:state_checked="true" android:state_pressed="true"
     android:drawable="@drawable/btn_radio_on_pressed" />
  <item android:state_checked="false" android:state_pressed="true"
     android:drawable="@drawable/btn_radio_off_pressed" />

  <item android:state_checked="true" android:state_focused="true"
     android:drawable="@drawable/btn_radio_on_selected" />
  <item android:state_checked="false" android:state_focused="true"
     android:drawable="@drawable/btn_radio_off_selected" />

  <item android:state_checked="false" android:drawable="@drawable/btn_radio_off" />
  <item android:state_checked="true" android:drawable="@drawable/btn_radio_on" />
</selector>

这下清楚了吧,原来RadioButton的样式是如此复杂,一共有6中状态(你非得说是8种那么你必须认真看看)。如图:


名称


图标


btn_radio_on_selected.png


btn_radio_on_pressed.png

   

btn_radio_on.png


btn_radio_off_selected.png


btn_radio_off_pressed.png


btn_radio_off.png

4.2 定义样式

目录结构如下:

在你的项目中建立一个style.xml文件,文件中的内容当然就是把默认的样式拷贝出来(熟练以后也可以自己写)然后进行一些修改。

style.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="MyRadioButton">
    <item name="android:background">@drawable/bt_radio</item>
    <item name="android:button">@null</item>
  </style>
</resources>

bt_radio是个xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/bt_require_radio_s" android:state_checked="true"/>
  <item android:drawable="@drawable/bt_require_radio_n" android:state_checked="false"/>
</selector>

bt_required_radio_s和bt_requires_radio_n分别为两张.9图片。如图:


名称


图标


bt_requires_radio_n


bt_requires_radio_n

4.3使用样式。

在你xml中添加   即可(MyRadioButton是上面的命名)。

使用的布局实例如下:

<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#aaaaaa"
  android:orientation="vertical" >

  <RadioButton
    style="@style/MyRadioButton"
    android:layout_width="wrap_content"
    android:layout_height="50dip"
    android:layout_marginTop="10dip"
    android:text="ABCD" />

  <RadioButton
    style="@style/MyRadioButton"
    android:layout_width="wrap_content"
    android:layout_height="50dip"
    android:layout_marginTop="10dip"
    android:text="EFGH" />

</RadioGroup>

效果图:

5、相关说明。

对于style.xml中为什么给background加个图片而把button的图片设置为@null。这点其实要看你个人需要:

①如果你需要的样式是点选以后整个背景都改变那么改background的样式就可以了,而且把button的样式设置成@null,如果不设置的话当然是系统默认的样式。
②如果你只是想把系统样式中的那个带圈的图给换点的话那么改button的样式就可以了。

6、总结。

改默认的组件样式挺简单的,总结步骤如下:

①找到默认的组件样式。
②把样式拷贝到你的项目中进行修改。
③应用样式。

这几个步骤不仅仅是对RadioButton的修改,而是所有的组件都可以这么改,修改方式大同小异。

7、读者作业。

看过本文以后还是给你留个练习的机会。你可以按照本文的思路改一个复选框试一试。

PS:有人觉得google一下可能比自己改要快很多,但是当你没有网络的时候就该这么改,而且你可以更清楚组件的默认样式。再说了google不一定就有那么合适的文章。文章中如有不清楚的地方可以留言,欢迎交流。
android交流QQ群:196761677 。

(0)

相关推荐

  • Android入门教程之创建样式与主题

    一.前言 作为一个安卓开发者,我们一般把焦点放在app的功能上.但是仅仅有功能是不够的,界面和功能一样重要.有两种方法可以改变app的外观.第一种就是直接在xml中直接修改View的属性.这种方法只适合于只有几个View和Activity的简单app.第二种方法就是创建自定义的样式和主题.如果你对web开发熟悉,第一种方法类似于使用内联的CSS样式,而第二种类似于使用style sheets. 这篇文章我们将介绍如何创建自定义的样式和主题. 二.创建Styles 样式显然是应用到UI控件上面的.

  • Android中应用界面主题Theme使用方法和页面定时跳转应用

    主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类:  复制代码 代码如下: android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 android:theme="@android:style/Theme.NoTitleBar"

  • Android自定义控件样式实例详解

    本文实例讲述了Android自定义控件样式的方法.分享给大家供大家参考,具体如下: Android控件样式自定义是用定义在drawable文件夹下的XML文件实现,在布局文件中通过设置控件的background属性达到效果. 一.控件常见状态:在XML文件中用到了selector节点,selector可以理解为状态切换器,不同的状态下切换不同的样式,各种状态用Item节点表示,以下为一些常见的状态(注意:statelist中第一个匹配当前状态的item会被使用.因此,如果第一个item没有任何状

  • 分析Android多主题颜色的相关问题

    如果您通过以下的代码来获取定义的颜色值 context.getResources().getColor(R.color.some_color_resource_id); 在 Android Studio 中会有一个 lint 警告,提示您 Resources#getColor(int) 在 Marshmallow 中被废弃了,建议使用主题可知的 Resources#getColor(int, Theme) 函数. 为了避免该警告,则可以使用 ContextCompat: ContextCompa

  • Android中自定义水平进度条样式之黑色虚线

    以下内容给大家介绍Android中自定义水平进度条样式之黑色虚线,对代码实现方法感兴趣的朋友一起学习吧. 布局layout中使用: <ProgressBar android:id="@+id/progress_bar" style="?android:attr/progressBarStyleHorizontal" <!--必须设置为水平--> android:progressDrawable="@drawable/myprogress&

  • Android主题切换之探究白天和夜间模式

    智能手机的迅速普及,大大的丰富了我们的娱乐生活.现在大家都喜欢晚上睡觉前玩会儿手机,但是应用的日间模式往往亮度太大,对眼睛有较为严重的伤害.因此,如今的应用往往开发了 日间和夜间 两种模式供用户切换使用,那日间和夜间模式切换究竟是怎样实现的呢? 在文字类的App上面基本上都会涉及到夜间模式.就是能够根据不同的设定.呈现不同风格的界面给用户.而且晚上看着不伤眼睛.实现方式也就是所谓的换肤(主题切换).对于夜间模式的实现网上流传了很多种方式.这里先分享一个方法给大家.通过设置背景为透明的方法.降低屏

  • 修改Android App样式风格的方法

    android中可以自定义主题和风格.风格,也就是style,我们可以将一些统一的属性拿出来,比方说,长,宽,字体大小,字体颜色等等.可以在res/values目录下新建一个styles.xml的文件,在这个文件里面有resource根节点,在根节点里面添加item项,item项的名字就是属性的名字,item项的值就是属性的值,如下所示: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><resou

  • 基于android样式与主题(style&theme)的详解

    android 中的样式和 CSS 样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view 控件属性的集合.如:需要定义字体的颜色和大小.在 CSS 中是这样定义的:<style>    .itcast{COLOR:#0000CC;font-size:18px;}</style>可以像这样使用上面的 css 样式: <div class="itcast"> 传智播客 </div>在 Android 中可以这样定义样

  • Android系统自带样式 (android:theme)

    android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式 android:theme="@android:style/Theme.NoTitleBar" : 不显示应用程序标题栏 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" : 不显示应用程序标题栏,并全屏 android:theme="Theme

  • Android 组件样式定制方法详解

    前言 android中有很多现成的组件可以使用,但是android上面的程序很多时候用系统自带的组件都不太合适,主要是样式可能不是我们想要的.这个时候我们就需要定制一些样式.本文将讲解如何修改组件的样式. 1.默认样式. 在修改组件的样式之前,我们还是先了解一下组件默认的样式,如下: 当然还有很多的组件,这里就简单的列举一下就可以了.从上面的默认组件可以看出这些组件的样式和你的app的风格不一致.那么这个时候你可能需要做的就是更改组件的样式.(本人觉得默认样式基本上都比较丑,基本上每个app中都

  • Android组件popupwindow使用方法详解

    先看效果: 现在很多的应用效果都需要做的炫些,像UC,以及天天静听,效果很炫的,源码已经对外开放了,有兴趣的可以去研究下的 上源码 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fi

  • Android组件之服务的详解

    目录 一.服务的概念 二.Android的多线程编程 2.1 线程的基本用法 2.2 在子线程中更新UI 更新方式一 更新方式二 2.3 解析异步消息处理机制 2.4 使用AsyncTask 三.服务的基本用法 3.1 首先定义一个服务 3.2 MyService类里重写几个方法 3.3 在注册文件中完成对服务的注册 3.4 启动和停止服务 3.5 活动和服务进行通信 四.服务的生命周期 五.服务的更多技巧 5.1 使用前台服务 5.2 服务中的多线程问题&IntentService 一.服务的

  • Android中SQLite 使用方法详解

    Android中SQLite 使用方法详解 现在的主流移动设备像android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面就向大家介绍一下SQLite常用的操作方法,为了方便,我将代码写在了Activity的onCreate中: @Ov

  • Android 中 onSaveInstanceState()使用方法详解

    Android 中 onSaveInstanceState()使用方法详解 覆盖onSaveInstanceState方法,并在onCreate中检测savedInstanceState和获取保存的值 @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt("currentposition", videoView.getCurrentPosition()); super.onSave

  • Android Parcelable接口使用方法详解

     Android Parcelable接口使用方法详解 1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementin

  • Android StringBuffer的使用方法详解

    今天,讲讲StringBuffer的使用. StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等操作,使用StringBuffer要更加适合一些. 在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能

  • Vue3内置组件Teleport使用方法详解

    目录 1.Teleport用法 2.完成模态对话框组件 3.组件的渲染 前言: Vue 3.0 新增了一个内置组件 teleport ,主要是为了解决以下场景: 有时组件模板的一部分逻辑上属于该组件,而从技术角度来看,最好将模板的这一部分移动到 DOM 中 Vue app 之外的其他位置 场景举例:一个 Button ,点击后呼出模态对话框 这个模态对话框的业务逻辑位置肯定是属于这个 Button ,但是按照 DOM 结构来看,模态对话框的实际位置应该在整个应用的中间 这样就有了一个问题:组件的

  • Android绘制旋转动画方法详解

    目录 1.准备工作 2.加速减速原理 3.初始化 4.开始 5.加速 6.减速 7.停止 8.项目源码 Layout部分 MainActivity部分 1.准备工作 首先需要有一个用于旋转的图片 需要考虑如何开始.结束.加速.减速 2.加速减速原理 本次的动画采用RotateAnimation,初始化需要的参数如下 public RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotXValue,i

  • Android编程自定义AlertDialog样式的方法详解

    本文实例讲述了Android编程自定义AlertDialog样式的方法.分享给大家供大家参考,具体如下: 开发的时候,通常我们要自定义AlertDialog来满足我们的功能需求: 比如弹出对话框中可以输入信息,或者要展示且有选择功能的列表,或者要实现特定的UI风格等.那么我们可以通过以下方式来实现. 方法一:完全自定义AlertDialog的layout.如我们要实现有输入框的AlertDialog布局custom_dialog.xml: <?xml version="1.0"

随机推荐