android studio怎么修改style
3个回答
展开全部
们在开发过程中,虽然关于自定义控件学会了如何在布局文件中指定它的值,以应对不同的需求。但有时还会遇到这样一种情况:我们希望对某个控件的属性,能够做一个全局的配置,这样我在本项目中使用它的时候,都是同样的表现,而不需要每个布局文件都复制一次属性的值,而在另一个项目中,我们可以进行另一个全局的配置。
属性定义及关于实现的思考
在上一篇中,我们讲到了自定义属性,如下所示:
<attr name="pwBorderWidth" format="dimension"/>1
其中format定义了这个属性的格式,它支持以下这些方式:
boolean 布尔值
color 颜色
dimension 尺寸
enum 枚举
flag 位或运算
float 浮点值
fraction 百分数
integer 整型值
string 字符串
reference 引用某一资源ID
在定义格式时,还可以指定多种格式。比如
<attr name="pwBorderWidth" format="dimension|reference"/>1
而这里要说的就是reference,引用某一资源ID。
我们可以定义一个属性,格式为reference,然后在theme中配置它的值为某个style,这样我们就可以读取到这个style的属性。这是我们对这个实现过程的思考。
下面以我以前写的一个项目IconTabPageIndicator为例,全部代码见其develop分支。这是一个底部菜单指示器,其中每个tab(继承自TextView)的具体表现我们都希望能够在style中定义。所以首先我们先定义一个属性,用于指定这个tab的style:
<attr name="tabView" format="reference"/>1
下面分别说明对这个属性的两种使用方式。
在Java代码中获取
重写构造方法。在本例子中,我们的TabView是通过在java代码中自己new出来的,调用的是构造方法TabView(Context context),所以我们需要重写这个构造方法,在这个构造方法中调用this(context, null, R.attr.tabView),第三个参数传入的是R.attr.tabView,即我们定义的style属性。
public TabView(Context context) {
this(context, null, R.attr.tabView);
}123
然后我们重写所调用的这个带defStyle参数的构造方法,因为另外一个构造方法TextView(Context context, AttributeSet attrs)也是调用了它:
public TabView(Context context, AttributeSet attr, int defStyle) {
super(context, attr, defStyle);
TypedArray a = context.obtainStyledAttributes(attr, R.styleable.TabView, defStyle, 0);
iconWidth = a.getDimensionPixelSize(R.styleable.TabView_iconWidth, 0);
iconHeight = a.getDimensionPixelSize(R.styleable.TabView_iconHeight, 0);
a.recycle();
}1234567
在构造方法中,首先第一行是调用父构造方法。接下来,我们就需要获取我们自定义的其他属性了,比如在这个例子中的图标宽高,获取时调用的方法与昨天所使用的有点不同 ,我们调用的是
obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes),第三个参数是我们定义的style属性,第四个参数则是style资源。在确定一个属性最终的值的时候,优先级顺序是这样的:
首先获取给定的AttributeSet中的属性值
如果找不到,则去AttributeSet中style(你在写布局文件时定义的style="@style/xxxx")指定的资源获取
如果找不到,则去defStyleAttr以及defStyleRes中的默认style中获取。
最后去找的是当前theme下的基础值。
所以在上面的方法中,我们也可以给第四个参数传一个我们默认的style(R.style.xxx),当使用者没有在第三个属性所指定的style中声明一些属性时,就会使用我们第四个参数中的style里的属性。
属性定义及关于实现的思考
在上一篇中,我们讲到了自定义属性,如下所示:
<attr name="pwBorderWidth" format="dimension"/>1
其中format定义了这个属性的格式,它支持以下这些方式:
boolean 布尔值
color 颜色
dimension 尺寸
enum 枚举
flag 位或运算
float 浮点值
fraction 百分数
integer 整型值
string 字符串
reference 引用某一资源ID
在定义格式时,还可以指定多种格式。比如
<attr name="pwBorderWidth" format="dimension|reference"/>1
而这里要说的就是reference,引用某一资源ID。
我们可以定义一个属性,格式为reference,然后在theme中配置它的值为某个style,这样我们就可以读取到这个style的属性。这是我们对这个实现过程的思考。
下面以我以前写的一个项目IconTabPageIndicator为例,全部代码见其develop分支。这是一个底部菜单指示器,其中每个tab(继承自TextView)的具体表现我们都希望能够在style中定义。所以首先我们先定义一个属性,用于指定这个tab的style:
<attr name="tabView" format="reference"/>1
下面分别说明对这个属性的两种使用方式。
在Java代码中获取
重写构造方法。在本例子中,我们的TabView是通过在java代码中自己new出来的,调用的是构造方法TabView(Context context),所以我们需要重写这个构造方法,在这个构造方法中调用this(context, null, R.attr.tabView),第三个参数传入的是R.attr.tabView,即我们定义的style属性。
public TabView(Context context) {
this(context, null, R.attr.tabView);
}123
然后我们重写所调用的这个带defStyle参数的构造方法,因为另外一个构造方法TextView(Context context, AttributeSet attrs)也是调用了它:
public TabView(Context context, AttributeSet attr, int defStyle) {
super(context, attr, defStyle);
TypedArray a = context.obtainStyledAttributes(attr, R.styleable.TabView, defStyle, 0);
iconWidth = a.getDimensionPixelSize(R.styleable.TabView_iconWidth, 0);
iconHeight = a.getDimensionPixelSize(R.styleable.TabView_iconHeight, 0);
a.recycle();
}1234567
在构造方法中,首先第一行是调用父构造方法。接下来,我们就需要获取我们自定义的其他属性了,比如在这个例子中的图标宽高,获取时调用的方法与昨天所使用的有点不同 ,我们调用的是
obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes),第三个参数是我们定义的style属性,第四个参数则是style资源。在确定一个属性最终的值的时候,优先级顺序是这样的:
首先获取给定的AttributeSet中的属性值
如果找不到,则去AttributeSet中style(你在写布局文件时定义的style="@style/xxxx")指定的资源获取
如果找不到,则去defStyleAttr以及defStyleRes中的默认style中获取。
最后去找的是当前theme下的基础值。
所以在上面的方法中,我们也可以给第四个参数传一个我们默认的style(R.style.xxx),当使用者没有在第三个属性所指定的style中声明一些属性时,就会使用我们第四个参数中的style里的属性。
微测检测
2023-10-30 广告
2023-10-30 广告
深圳市微测检测有限公司始创于2005年,是一家综合性、全方位、一站式的权威第三方检测认证公司。自成立以来,Microtest微测检测已成功为上万家企业完成数十万计的产品测试和认证,协助企业的产品畅销全球。Microtest微测检测已建立二十...
点击进入详情页
本回答由微测检测提供
2016-03-26 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
你可以试试 Preferences -> Project Settings -> Code Style -> Manage
Code Generation 和 Wrapping and Brace
Code Generation 和 Wrapping and Brace
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Preferences -> Project Settings -> Code Style -> Manage Code Generation 和 Wrapping and Brace
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询