精华内容
下载资源
问答
  • style name=”AppBaseTheme” parent=”android:Theme.Light”> </style> <style name=”AppTheme” parent=”AppBaseTheme”> </style> <style name=”testStyle”> <item name...
  • QML自定义style

    2014-06-24 08:58:12
    QML对TablveView做的自定义style,需要的朋友可以下载参考,对初次做的朋友肯定会有帮助。
  • Android自定义Style

    千次阅读 2018-09-10 18:25:22
    最近接触了一款APP,从Android5.1.1升级到Android8.1,整个APP使用的主题为”@android:style/Theme.DeviceDefault.Light”。测试在Bugzilla上提了好几个关于UI方面的Bug。研发一看就知道这些不是Bug,但是测试他们...

    1 背景介绍

    最近接触了一款APP,从Android5.1.1升级到Android8.1,整个APP使用的主题为”@android:style/Theme.DeviceDefault.Light”。测试在Bugzilla上提了好几个关于UI方面的Bug。研发一看就知道这些不是Bug,但是测试他们毕竟不是开发,只会看表面现象,同一个APP在不同版本Android平台上UI不一致都是Bug。要给测试、PM说清楚这些不是Bug,就必须了解Android系统的Style.Style可以简单理解为一组属性的集合,方便对APP的样式做一个统一处理。下面从属性开始了解Style.

    2 属性

    属性(attr)可以简单理解为特性。比如名字、皮肤颜色等等都是属性。

    2.1申明属性

    假如要实现人类皮肤和名字这样一组属性,那在Android中要如何实现呢?

    首先在“res/values”目录下创建一个文件名为attrs.xml。具体内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    
    <resources>
    
    <!-- 自定义属性skinColor -->
    
    <attr name="customSkinColor" format="color" />
    
    <!-- 自定义属性name -->
    
    <attr name="customName" format="string" />
    
    <!-- 申明一个人类的属性的集合 -->
    
    <declare-styleable name="customPerson">
    
    <attr name="customSkinColor" />
    
    <attr name="customName" />
    
    </declare-styleable>
    
    </resources>

     

    这样申明之后发生了什么?

    2.2 属性实现

    当申明了属性之后,在R.java中会有如下定义存在:

    public final class R {
    
    public static final class attr {
    
    public static final int customSkinColor=0x7f03006f;
    
    public static final int customName=0x7f03006d;
    
    }
    
    public static final class styleable {
    
    public static final int[] customPerson={
    
    0x7f03006d, 0x7f03006f
    
    };
    
    public static final int customPerson_customName=0;
    
    public static final int customPerson_customSkinColor=1;
    
    }
    
    }

     

    Android中的每个资源,都有它唯一的编号。编号是一个32位数字,用十六进制表示就是0xPPTTEEEE。PP为package id,TT 为type id,EEEE 为entry id.比如上面这个例子,执行下面的命令:

    aapt d resources app-debug.apk | grep 0x7f03006d

    spec resource 0x7f03006d com.crab.test:attr/customName: flags=0x00000000

    resource 0x7f03006d com.crab.test:attr/customName: <bag>

    这就表示customName这个资源的编号是 0x7f03006d 。它的package id是0x7f,资源类型的id为0x03(代表attr),它的entry id为0x006d。

    备注:package id的值为0x01是系统资源,也就是包名为”android”的资源。type id代表的是drawable,string,layout等等类型的资源,默认是从值0x01开始。entry id代表这个资源在type id中的位置,默认是从0x0000开始。

    2.3 属性的使用

    2.3.1 属性组使用

    属性组(styleable)是属性的集合。前面定义了一个属性组(customPerson),它有两个属性(customName、customSkinColor)。下面来使用属性组:

    public class PersonView extends TextView {
    
    public PersonView(Context context, @Nullable AttributeSet attrs) {
    
    super(context, attrs);
    
    //customPerson是一个数组,在刚才R.java中定义过
    
    final TypedArray a = context.obtainStyledAttributes(
    
    attrs, R.styleable.customPerson, 0, 0);
    
    //customPerson_customSkinColor的值为1,数组第二个元素
    
    int skinColor = a.getColor(R.styleable.customPerson_customSkinColor, Color.WHITE);
    
    //customPerson_customName的值为0,数组第一个元素
    
    String name = a.getString(R.styleable.customPerson_customName);
    
    setText(name);
    
    setTextColor(skinColor);
    
    a.recycle();
    
    }
    
    }

     

    属性组的使用是不是很简单,下面设置具体属性值。

    2.3.2 属性值的设定

    现在来给具体的属性设置值:

    <?xml version="1.0" encoding="utf-8"?>
    
    <android.support.constraint.ConstraintLayout
    
    xmlns:android="http://schemas.android.com/apk/res/android"
    
    xmlns:app="http://schemas.android.com/apk/res-auto"
    
    xmlns:tools="http://schemas.android.com/tools"
    
    android:layout_width="match_parent"
    
    android:layout_height="match_parent"
    
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    
    tools:context="com.crab.test.MainActivity"
    
    tools:showIn="@layout/activity_main">
    
    
    <com.crab.test.PersonView
    
    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"
    
    app:customName="xiechaojun" //自己定义的属性
    
    app:customSkinColor="#FFFF0000" //自己定义的属性
    
    app:layout_constraintBottom_toBottomOf="parent"
    
    app:layout_constraintLeft_toLeftOf="parent"
    
    app:layout_constraintRight_toRightOf="parent"
    
    app:layout_constraintTop_toTopOf="parent"
    
    />
    
    
    </android.support.constraint.ConstraintLayout>

     

    属性的使用也很简单。现在考虑一个问题,如果APP里面有10个PersonView,想让所有PersonView的皮肤颜色都是黄色,要怎么办?下面介绍Style.

    3 Android Style

    3.1 定义集合属性

    10个PersonView?咋办?首先在attrs.xml中创建一个属性名字以及使用这个属性的集合

    <?xml version="1.0" encoding="utf-8"?>
    
    <resources>
    
    <!-- 自定义属性skinColor -->
    
    <attr name="customSkinColor" format="color" />
    
    <!-- 自定义属性name -->
    
    <attr name="customName" format="string" />
    
    <!-- 申明一个人类的属性的集合 -->
    
    <declare-styleable name="customPerson">
    
    <attr name="customSkinColor" />
    
    <attr name="customName" />
    
    </declare-styleable>
    
    
    <!-- 自定义属性personViewStyle -->
    
    <attr name="personViewStyle" format="reference" />
    
    <!-- 申明一整个应用人类要使用的属性的集合 -->
    
    <declare-styleable name="customPersonStyle">
    
    <attr name="personViewStyle" />
    
    </declare-styleable>
    
    </resources>

     

    3.2 自定义Style

    在“res/values/styles.xml”文件中添加自定义的Style。

    <resources>
    
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    
    <!-- Customize your theme here. -->
    
    <item name="colorPrimary">@color/colorPrimary</item>
    
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    
    <item name="colorAccent">@color/colorAccent</item>
    
    <!-- 与上边属性名字对应 -->
    
    <item name="personViewStyle">@style/PersonStyle</item>
    
    </style>
    
    <!-- 定义所有PersonView的皮肤颜色为黄色 -->
    
    <style name="PersonStyle">
    
    <item name="customSkinColor">#FFFFFF00</item>
    
    </style>
    
    </resources>

     

    3.3 使用自定义的Style

    3.3.1 PersonView的使用

    请注意与2.3.1小节实现不同的地方:

    public class PersonView extends TextView {
    
    public PersonView(Context context, @Nullable AttributeSet attrs) {
    
    super(context, attrs);
    
    //系统主题
    
    final Resources.Theme theme = context.getTheme();
    
    //获取自定义的person style属性集合
    
    final TypedArray a = theme.obtainStyledAttributes(
    
    attrs, R.styleable.customPersonStyle, 0, 0);
    
    //获取到具体某个person style ID.
    
    int personStyleId =
    
    a.getResourceId(R.styleable.customPersonStyle_personViewStyle,0);
    
    if(personStyleId!=-1) {
    
    TypedArray aa =
    
    theme.obtainStyledAttributes(personStyleId, R.styleable.customPerson);
    
    //获取到主题中设定的皮肤值
    
    int skinColor = aa.getColor(R.styleable.customPerson_customSkinColor, Color.BLUE);
    
    setTextColor(skinColor);
    
    a.recycle();
    
    }
    
    a.recycle();
    
    }
    
    }

     

    3.3.2 布局文件中使用

    在布局文件中定义2个PersonView,不设置它皮肤颜色的属性,但是最后效果是两个PersonView的字体颜色都是黄色。

    <?xml version="1.0" encoding="utf-8"?>
    
    <android.support.constraint.ConstraintLayout
    
    xmlns:android="http://schemas.android.com/apk/res/android"
    
    xmlns:app="http://schemas.android.com/apk/res-auto"
    
    xmlns:tools="http://schemas.android.com/tools"
    
    android:layout_width="match_parent"
    
    android:layout_height="match_parent"
    
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    
    tools:context="com.crab.firstjniapplication.MainActivity"
    
    tools:showIn="@layout/activity_main">
    
    <LinearLayout
    
    android:layout_width="match_parent"
    
    android:layout_height="wrap_content"
    
    android:orientation="vertical"
    
    app:layout_constraintBottom_toBottomOf="parent"
    
    app:layout_constraintLeft_toLeftOf="parent"
    
    app:layout_constraintRight_toRightOf="parent"
    
    app:layout_constraintTop_toTopOf="parent"
    
    >
    
    <!-- 这里没有设置皮肤颜色,但是系统主题中有设置为黄色-->
    
    <com.crab.firstjniapplication.PersonView
    
    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"
    
    android:text="xiechaojun"
    
    />
    
    <com.crab.firstjniapplication.PersonView
    
    android:layout_width="wrap_content"
    
    android:layout_height="wrap_content"
    
    android:text="xiechaojun1"
    
    />
    
    </LinearLayout>
    
    </android.support.constraint.ConstraintLayout>

     

    4 解Bug

    比如想让APP UI在不同Android版本上表现一样,可以自定Style,让APP的样式统一。比如想让所有的EditText的样式保持统一不随平台改变,可以下面这样实现:

    <style name="Theme.Base" parent="@android:style/Theme.DeviceDefault.Light">
    
    <item name="android:buttonStyle">@style/Button.Base</item>
    
    <!-- 使用自定义样式 -->
    
    <item name="android:editTextStyle">@style/CustomEditTextStyle</item>
    
    </style>
    
    
    <style name="CustomEditTextStyle" parent="@android:style/Widget.Material.EditText">
    
    <!-- 自定义样式 -->
    
    </style>

    5 Android support包属性遇到的问题

    当整个应用使用support包的Theme时,自己定义了一个AlertDialog,继承制android.app.AlertDialog,想给这个自定义的AlertDialog设置主题,使用的下面方法:

    <!-- 使用的是support包的主题 -->
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- 自定义的AlertDialog样式 --> 
        <item name="alertDialogTheme">@style/AppAlertDialogTheme</item>
     </style>
    <style name="AppAlertDialogTheme" parent="ThemeOverlay.AppCompat.Dialog.Alert">
        <!-- 给AlertDialog的List项目添加一条分割线--> 
     <item name="listDividerAlertDialog">@drawable/preference_list_divider_material</item>
    </style>

    这样设置之后发现弹出的对话框包含ListView时并没有给ListView的每一个Item绘制一条下划线,那是什么原因呢?

    我们来看下android.app.AlertDialog的源码:

        /**
         * Creates an alert dialog that uses the default alert dialog theme.
         * <p>
         * The default alert dialog theme is defined by
         * {@link android.R.attr#alertDialogTheme} within the parent
         * {@code context}'s theme.
         *
         * @param context the parent context
         * @see android.R.styleable#Theme_alertDialogTheme
         */
        protected AlertDialog(Context context) {
            this(context, 0);
        }

    从源码可以看出alertDialogTheme是定义在属性android.R.attr.alertDialogTheme下的,也就是包名为android这个应用下的。而像我们自定义的alertDialogTheme:

        <!-- 自定义的AlertDialog样式 --> 
        <item name="alertDialogTheme">@style/AppAlertDialogTheme</item>

    是在自己的包名.R.attr.alertDialogTheme下面的.知道原因了都很好改,可以使用下面两种方法:

    1.在自定义的AlertDialog主题前都加上android,比如:

    <!-- 使用的是support包的主题 -->
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- 自定义的AlertDialog样式 --> 
        <item name="android:alertDialogTheme">@style/AppAlertDialogTheme</item>
     </style>
    <style name="AppAlertDialogTheme" parent="ThemeOverlay.AppCompat.Dialog.Alert">
        <!-- 给AlertDialog的List项目添加一条分割线--> 
     <item name="android:listDividerAlertDialog">@drawable/preference_list_divider_material</item>
    </style>

    2.自定义的AlertDialog继承自Support包里面的AlertDialog.

    展开全文
  • android如何自定义style

    2016-05-02 17:23:29
    1、在resource里自定义style 2、在控件属性中使用自定义style代码: 1、<resources xmlns:android="http://schemas.android.com/apk/res/android"> //style可以通过指定parent属性继承 <style name=...

    1、在resource里自定义style
    2、在控件属性中使用自定义style

    代码:
    1、

    <resources xmlns:android="http://schemas.android.com/apk/res/android">  
    //style可以通过指定parent属性继承
     <style name="AppBaseTheme" parent="android:Theme.Light">  
     </style>  
     <style name="AppTheme" parent="AppBaseTheme">  
     </style>  
    
    //定义style名
    <style name="testStyle">
    //定义style的属性
            <item name="android:textSize">30px</item>   
            <item name="android:textColor">#1110CC</item>  
            <item name="android:width">150dip</item>  
            <item name="android:height">150dip</item>  
    </style>  
    
    </resources>  

    使用示例:

    <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"  
        tools:context=".MainActivity" >  
    
        <TextView  
            <!-- 使用自定义style -->
            style="@style/testStyle"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:gravity="center"  
            android:layout_centerHorizontal="true"  
            android:layout_centerVertical="true"  
            android:text="@string/hello_world" />  
    
    </RelativeLayout> 
    展开全文
  • android Dialog 自定义style常规属性设置

    千次阅读 2018-12-07 16:31:55
    <item name="android:windowAnimationStyle">@style/PopupAnimation //backgroundDimAmount 值的范围是“0.0~1.0”这个属性跟“backgroundDimEnabled”息息相关,当“backgroundDimEnabled”设置为“true”时,它...
    //backgroundDimEnabled 赋值为true(默认为true)的时候,当dialog弹出的时候,其余地方变暗,赋值为false的时候其余地方正常显示
    <item name="android:backgroundDimEnabled">true</item>
    //windowFullscreen 是否全屏显示,“true”为全屏,“false”为不全屏
    <item name="android:windowFullscreen">false</item>
    //windowNoTitle 是否显示标题,“true”为显示,“false”为不显示
    <item name="android:windowNoTitle">true</item>
    //windowContentOverlay 是否设置window上的覆盖悬浮的东西,不需要的话就设置@null,需要的话就设置一些资源图片
    <item name="android:windowContentOverlay">@null</item>
    //windowIsTranslucent 窗口是否透明显示
    <item name="android:windowIsTranslucent">true</item>
    //windowBackground 窗口背景设置 
    <item name="android:windowBackground">@android:color/transparent</item>
    //是否悬浮在窗口上
    <item name="android:windowIsFloating">true</item>
    //是否设置边框
    <item name="android:windowFrame">@null</item>
    //是否有弹出动画
    <item name="android:windowAnimationStyle">@style/PopupAnimation</item>
    //backgroundDimAmount 值的范围是“0.0~1.0”这个属性跟“backgroundDimEnabled”息息相关,当“backgroundDimEnabled”设置为“true”时,它才能生效,值越大背景颜色越暗,当为“1.0”的时候背景全黑
    <item name="android:backgroundDimAmount">0.5</item>
    展开全文
  • 目录一、自定义Style的概念二、目标明确三、使用步骤1.创建自定义Style文件2.Activity布局中使用自定义Style四、总结 一、自定义Style的概念 Style样式可以为组件或者窗口指定统一的外观和格式(宽高尺寸、字体颜色...

    一、自定义Style的概念

    Style样式可以为组件或者窗口指定统一的外观和格式(宽高尺寸、字体颜色、字号、背景颜色等属性),并把这些样式抽离成一个单独的XML资源文件,方便复用。

    二、目标明确

    本次我们通过自定义Style实现登录按钮样式的抽离封装:
    在这里插入图片描述
    未使用自定义Style抽离封装之前的代码:
    在这里插入图片描述

    三、使用步骤

    1.创建自定义Style文件

    res/values/目录下,创建一个MyButton.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <style name="MyButton">
            <item name="android:layout_width">150dp</item>
            <item name="android:layout_height">100dp</item>
            <item name="android:layout_gravity">center</item>
            <item name="android:text">@string/login_btn</item>
            <item name="android:textColor">@color/colorPrimary</item>
            <item name="android:textSize">30sp</item>
        </style>
    
    </resources>
    

    2.Activity布局中使用自定义Style

    <Button
         style="@style/MyButton"
         />
    

    效果如下:
    在这里插入图片描述

    四、总结

    自定义Style可以很好地帮助我们在Android的开发过程中,对组件样式的抽离封装,防止应用组件出现样式不匹配的问题

    展开全文
  • Android Style自定义属性

    千次阅读 2019-03-07 17:46:59
    Theme1.1 基本概念1.1.1 Style(样式)1.1.2 Theme(主题)1.2 创建和应用style1.3 扩展和自定义style1.4 创建和应用theme1.5 扩展和自定义theme1.6 添加指定版本的style1.7 Style层级1.7.1 TextAppearance2 Android ...
  • ArcMap中使用自定义Style文件

    千次阅读 2013-12-13 16:42:14
    style文件是ArcGIS Desktop的符号库文件,默认符号库的位置在:安装目录\ArcGIS\Desktop10.0\Styles中,此文件夹中有两类:style和ServerStyle。前者为Desktop的符号库文件类型,后者为Engine和ArcGIS Server的...
  • alertDialog的自定义style和使用(Android)

    千次阅读 2013-08-12 17:40:15
    最近做项目,用到alertDialog,用系统自带的style很难看,所以查了资料自己定义了个style. res/value/style.xml内增加以下代码:    @null //Dialog的windowFrame框为无  true //是否浮现在activity之上  ...
  • Android-自定义View-自定义属性、style

    千次阅读 2018-04-17 16:14:08
    思路首先,为什么需要自定义View?现有的View满足不了你的需求,也没有办法从已有控件派生一个出来;界面元素需要自己绘制。现有View可以满足要求,把它做成自定义View只是为了抽象:为这个自定义View提供若干方法,...
  • UITableViewController最基本用法实现(Accessory多选、自定义Style多选、目录表格、编辑表格) 用于初学者了解其UITableViewController
  • Dialog自定义Style

    千次阅读 2011-12-04 00:05:51
    要将dialog的 title,白色边框等,去掉的话,可以使用style。  在style文件中加入 dialog样式   ... 将自定义的样式加入到dialog中。 Dialog dialog = new Dialog(SetActivity.this, R.s
  • 今天使用了一个自定义控件,涉及到大量的自定义属性,并且很多属性都复用了。经过查阅并且运行测试,可能大家也有遇到这样的问题,因此以下列出解决方法...然后在你的style下直接填入你的自定义属性名即可:&lt...
  • C# WinForm 自定义CheckBox

    2016-04-01 15:36:20
    使用VS2005编写,VS2005以上的版本都可以使用此控件
  • 自定义style的progressBar...

    千次阅读 2017-03-30 09:59:33
    好久没弄过自定义style的progressBar了1.xml内创建progressBar默认为圆环的progressBar,添加stylestyle="@android:style/Widget.ProgressBar.Horizontal"点进去<style name="Widget.ProgressBar.Horizontal
  • Android开发技巧——自定义控件之使用style回顾在上一篇《Android开发技巧——自定义控件之自定义属性》中,我讲到了如何定义属性以及在自定义控件中获取这些属性的值,也提到了关于这些属性除了可以在布局文件中...
  • 自定义view的时候,通常会自定义一些属性,为了便于统一使用,在style文件中把自定义属性赋值。但是我却在自定义view中,取不到style中设置的值,如果在xml中设置属性值却能正常获取,这是为什么呢? 在res/attrs...
  • 在android style文件中使用自定义属性

    千次阅读 2017-11-20 15:54:02
    通常在style里写控件属性样式除了规范,最主要的还是为了以后可能修改方便些,平常我们style写的都是系统自带的控件属性,如:<style name="navigationbar_top_img_style"> <item name="android:layout_width">wrap...
  • WPF 自定义模版 Style 中控件引用方法

    千次阅读 2018-09-16 22:28:13
    本来想这是原创 不过貌似已经有很多资料介绍的很详细 直接搜 WPF+ OnApplyTemplate 这里直接贴我找到的一个链接 ... 当然也有我自己的一个创新内容 ...绑定如果想绑定一两个控件 直接后台代码像上面这样写没问题的, ...
  • 需求:在代码中读取style(包含库工程的自定义属性),并根据style设置 在主工程中,自定义属性,如果想在style中引用,则加上主工程包名即可。这里注意,包名在build.gradle ---> applicationId中引用。 &...
  • 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。... 1. 在当前页面,自行定义... }, 调用:(可多种样式混用:自定义style、class 等) :style="input" :style="backgroundColor
  • 直接使用属性名就行了 不用加命名空间了 代码如下: <style name="style_header_radius"> <item name="androi
  • 如何在android style文件中使用自定义属性

    万次阅读 热门讨论 2014-11-24 10:06:52
    前几天我在项目中遇到了这样一个问题:我为项目写了一个自定义控件,这个控件会被大量复用,所以我准备在style.xml文件中定义一个style来减少重复xml布局内容的编写,但是里面有一个自定义的控件属性,问题出现在...
  • 异常: Error:(128, 5) error: style attribute 'com.honghui0531.prebiotics.view:attr/item_right_icon_src' not found. 自定义属性文件 attrs.xml
  • 一般而言,安裝完EndNote 後,預設Output Styles、Filters、Connection Files 的電腦存放路徑如下–   C:\Program Files\EndNote X4 \Styles C:\Program Files\EndNote X4 \Filters C:\Program Files\EndNote ...
  • ProgressBar 自定义样式

    万次阅读 2018-08-29 13:04:50
    ProgressBar 默认样式很多时候是不满足项目需求的,简单粗暴点说,就是有些丑。 下面展示一下自定义ProgressBar的过程:  首先,在styles.xml...style name="MyProgressBar" parent="@android:...
  • 自定义dialog布局里面有一个datepicker,他的风格为:@android:style/Theme.Light, 是不是两个的风格冲突了,datepicker的风格显示不出来。。呜呜 自定义的dialog,一个标题,中间一个datepicker,下面两个按钮; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 356,534
精华内容 142,613
关键字:

自定义style