- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定在Android中开发界面的最佳方法是什么。
通过将内联属性移动到样式文件来清理布局文件是否更好?据我所知,在HTML中最好在HTML中使用类和ID,并在style.css文件中使用它们。 android呢?
最佳答案
我发现了这一点,也许对其他人有帮助。
何时使用样式
我们必须解决的第一个问题是一个简单的问题:什么时候应该使用样式而不是内联属性?
规则1:当多个视图在语义上相同时,请使用样式。
可以通过一些示例很好地说明此规则:
您正在创建一个计算器。每个按钮应该看起来相同,因此创建`CalculatorButton`样式是有意义的。
您有几个具有多种文本格式的屏幕-例如标题,子标题和文本。您可以通过创建`Header`,`Subheader`和`Text`样式来统一它们的外观。
您在整个应用中都有缩略图。您希望它们看起来都一样。 “缩略图”样式诞生了。
所有这些示例中的共同点是这些Views
不仅使用相同的属性-它们在整个应用程序中扮演相同的角色。现在,当您想要调整任何这些Views
的外观时,您只需编辑样式并立即更改它们即可。这样可以节省您的时间,精力,并使您的Views
保持一致。
是否想节省更多工作?使用资源引用!
规则2:在适当时在样式内使用引用。
您可以通过以下方式定义样式:
<style name="MyButton">
<item name="android:minWidth">88dp</item>
<item name="android:minHeight">48dp</item>
</style>
minWidth
根据屏幕大小变化怎么办?您可以按照每个屏幕尺寸(例如
sw600dp
和
sw900dp
)复制样式一次,但是随后还必须复制
minHeight
属性。如果您想同时更改两个属性怎么办?突然,到处都有大量的
MyButtons
定义,每个副本都复制了所有其他属性。这是灾难的秘诀;忘记更改多个副本之一中的一个属性是如此容易。
<style name="MyButton">
<item name="android:minWidth">@dimen/button_min_width</item>
<item name="android:minHeight">@dimen/button_min_height</item>
</style>
View
的宽度)是荒谬的。您可以为此使用尺寸。样式也一样。
paddingLeft
和
paddingRight
更改为
paddingStart
和
paddingEnd
)。
View
(如CSS),那将是很棒的。
<style name="MyTheme">
<item name="android:buttonStyle">@style/MyButton</item>
</style>
Spinner
样式:
<style name="MySpinner" parent="Widget.AppCompat.Spinner" />
Button
样式的示例,该样式通常使用Holo,但在适当时使用Material。
/values/values.xml
中:
<style name="ButtonParent" parent="android:Widget.Holo.Button />
<style name="ButtonParent.Mine">
<item name="android:background">@drawable/my_bg</item>
</style>
/values-v21/values.xml
中:
<style name="ButtonParent" parent="android:Widget.Material.Button />
TextAppearance
允许您为某些最常修改的文本属性合并两种样式。看一下您所有的样式:其中有多少只修改文本的外观?在这种情况下,您可以只修改
TextAppearance
。
TextAppearance
:
<style name="MyTextAppearance" parent="TextAppearance.AppCompat">
<item name="android:textColor">#0F0</item>
<item name="android:textStyle">italic</item>
</style>
TextAppearance
作为父项。
TextView
中使用它:
<TextView
style="@style/MyStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/MyTextAppearance" />
TextView
,从而为一个视图提供了多达两种的样式!不如真正的多种样式好,但我会尽力而为。
TextAppearance
的任何类中使用
TextView
。这意味着
EditText
,
Button
等都支持文本样式。
<TextView style="HelloWorldTextView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
Views
不在同一上下文中使用,则最终可能希望它们的外观有所不同。到那时,如果没有意外的副作用,您的基本样式将变得难以编辑。
TextViews
相同的文本外观和背景。您认为,“嘿,我将创建一种样式,从而减少代码重复。”最初,一切都是笨拙的,但是最终您要调整
TextViews
的外观。问题是,到目前为止,该样式已在各处使用,因此您不能在没有附带损害的情况下对其进行编辑。
Views
在语义上相同时应该使用样式的原因。这样可以确保在更改样式时,您确实确实希望使用该样式的每个
View
都进行更改。
Button
看起来都一样,所以我制作了
ButtonStyle
。后来,我决定
Buttons
的一半看起来应该稍有不同-通过育儿,我可以创建
ButtonStyle.Different
,获得基本样式+调整。
<!-- Our parent style -->
<style name="Parent" />
<!-- Implicit parenting, using dot notation -->
<style name="Parent.Child" />
<!-- Explicit parenting, using the parent attribute -->
<style name="Child" parent="Parent" />
<style name="Parent.Child" parent="AnotherParent" />
AnotherParent
。
<Button
style="@style/MyWidgets.Button.Awesome"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<style name="MyWidgets.Button.Awesome" parent="SomethingElse" />
Button
是基于
MyWidgets.Button
的,但事实并非如此!样式名称具有误导性,并且发现样式的唯一方法是进行额外的工作并挖掘您的样式文件。
<style name="MyButton" parent="android:Widget.Holo.Button" />
<style name="MyButton.Borderless" parent="android:Widget.Holo.Button.Borderless" />
MyButton.Borderless
与
MyButton
有关,但是它们没有共同之处!让我们通过删除名称中的点来消除混乱:
<style name="MyButton" parent="android:Widget.Holo.Button" />
<style name="MyBorderlessButton" parent="android:Widget.Holo.Button.Borderless" />
View
时,主题应用于一组
Views
(或整个
Activity
)。
Activity
:
<style name="MyTheme">
<style name="colorPrimary">@color/my_primary_color</style>
</style>
style
标记-但实际上它们在完全不同的情况下使用!它们不能使用相同的属性-例如,您可以在视图上定义
textColor
,但是主题没有
textColor
属性。同样,主题中存在
colorPrimary
,但在样式中它们未使用。从而:
View
及其所有子项2。即使在这种情况下,也不要将两者混为一谈,尽管可以同时使用它们:
<View
style="@style/MyView"
android:theme="@style/MyTheme" />
View
主题模拟为
Toolbar
,但是直到Lollipop是应用程序的最低支持版本为止,您将获得一小段时间。换句话说-您可以在几年内使用此功能。 :P
关于android - Android中的编码样式:什么时候应该使用样式而不是内联属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102407/
我正在尝试在Elasticsearch中返回的值中考虑地理位置的接近性。我希望近距离比某些字段(例如legal_name)重要,但比其他字段重要。 从文档看来,当前的方法是使用distance_fea
我是Elasticsearch的初学者,今天在进行“多与或”查询时遇到问题。 我有一个SQL查询,需要在Elastic中进行转换: WHERE host_id = 999 AND psh_pid =
智能指针应该/可以在函数中通过引用传递吗? 即: void foo(const std::weak_ptr& x) 最佳答案 当然你可以通过const&传递一个智能指针。 这样做也是有原因的: 如果接
我想执行与以下MYSQL查询等效的查询 SELECT http_user, http_req_method, dst dst_port count(*) as total FROM my_table
我用这两个查询进行测试 用must查询 { "size": 200, "from": 0, "query": { "bool": { "must": [ { "mat
我仍在研究 Pro Android 2 的简短服务示例(第 304 页)同样,服务示例由两个类组成:如下所示的 BackgroundService.java 和如下所示的 MainActivity.j
给定标记 like this : header really_wide_table..........................................
根据 shouldJS 上的文档网站我应该能够做到这一点: ''.should.be.empty(); ChaiJS网站没有使用 should 语法的示例,但它列出了 expect 并且上面的示例似乎
我在 Stack Overflow 上读到一些 C 函数是“过时的”或“应该避免”。你能给我一些这种功能的例子以及原因吗? 这些功能有哪些替代方案? 我们可以安全地使用它们 - 有什么好的做法吗? 最
在 C++11 中,可变参数模板允许使用任意数量的参数和省略号运算符 ... 调用函数。允许该可变参数函数对每个参数做一些事情,即使每个参数的事情不是一样的: template void dummy(
我在我从事的项目之一上将Shoulda与Test::Unit结合使用。我遇到的问题是我最近更改了此设置: class MyModel :update end 以前,我的(通过)测试看起来像这样: c
我该如何做 or使用 chai.should 进行测试? 例如就像是 total.should.equal(4).or.equal(5) 或者 total.should.equal.any(4,5)
如果您要将存储库 B 中的更改 merge 到存储库 A 中,是否应该 merge .hgtags 中的更改? 存储库 B 可能具有 A 中没有的标签 1.01、1.02、1.03。为什么要将这些 m
我正在尝试执行X AND(y OR z)的查询 我需要获得该代理为上市代理或卖方的所有已售属性(property)。 我只用 bool(boolean) 值就可以得到9324个结果。当我添加 bool
我要离开 this教程,尝试使用 Mocha、Supertest 和 Should.js 进行测试。 我有以下基本测试来通过 PUT 创建用户接受 header 中数据的端点。 describe('U
我正在尝试为 Web 应用程序编写一些 UI 测试,但有一些复杂的问题希望您能帮助我解决。 首先,该应用程序有两种模式。其中一种模式是“训练”,另一种是“现场”。在实时模式下,数据直接从我们的数据库中
我有一个规范: require 'spec_helper' # hmm... I need to include it here because if I include it inside desc
我正在尝试用这个测试我在 Rails 中的更新操作: context "on PUT to :update" do setup do @countdown = Factory(:count
我还没有找到合适的答案: onclick="..." 中是否应该转义 &(& 符号)? (或者就此而言,在每个 HTML 属性中?) 我已经尝试在 jsFiddle 和 W3C 的验证器上运行转义和非
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Main extends Applet i
我是一名优秀的程序员,十分优秀!