我已经开始在我的 android 应用程序中使用样式等,并且到目前为止我已经完成了所有工作。我很理解“风格”section of the guide .
但是,环顾四周,如 this thread ,我无法真正弄清楚两者之间的区别(declare-stylable 和 style)。
根据我的理解 declare-styleable 获取其中指定的属性并将其指定为可样式化,然后根据需要从代码中对其进行更改。
但如果真的是这样,在布局中定义属性不是更简单吗?或者声明一个指定它的样式?
最佳答案
我认为将属性声明为可样式化与否只有以下区别。
在 attrs.xml 中,您可以直接在“resources”部分或“declare-styleable”中声明自定义属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="attrib1" format="string" />
<declare-styleable name="blahblah">
<attr name="attrib2" format="string" />
</declare-styleable>
所以现在我们将“attrib1”定义为不可样式化,将“attrib2”定义为可样式化。
在 layout/someactivity.xml 我们可以直接使用这些属性(不需要命名空间):
<com.custom.ViewClass attrib1="xyz" attrib2="abc"/>
您可以在 style.xml 声明中使用“styleable”属性“attrib2”。同样,这里不需要命名空间(即使在布局 XML 中使用了命名空间)。
<style name="customstyle" parent="@android:style/Widget.TextView">
<item name="attrib2">text value</item>
<!-- customize other, standard attributes too: -->
<item name="android:textColor">@color/white</item>
</style>
然后你也可以设置每个样式的属性。
<com.custom.CustomView attrib1="xyz" style="@style/customstyle"/>
假设我们这样做:我们直接在 XML 中设置 attrib1,我们在样式中设置 attrib2。
我在其他地方看到描述说“blahblah”必须是使用这些属性的自定义 View 类的名称,并且您需要使用命名空间来引用您的自定义属性布局 XML。但这些似乎都没有必要。
styleable 和 non-styleable 的区别似乎在于:
style.xml”声明中使用可样式化的属性。obtainStyledAttributes(),非样式属性用 attr.getAttributeValue() 或类似的。在我在网上看到的大多数教程和示例中,只使用了 obtainStyledAttributes()。但是,这不适用于直接在布局中声明的属性,而不使用样式。如果你像大多数教程中所示的那样执行obtainStyledAttributes(),你根本不会得到属性attrib1;你只会得到 attrib2 因为它是在样式中声明的。使用 attr.getAttributeValue() 的直接方法有效:
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
String attrib1 = attrs.getAttributeValue(null, "attrib1");
// do something with this value
}
由于我们没有使用命名空间来声明“attrib1”,因此我们将 null 作为命名空间参数传递给 getAttributeValue()。
关于android - 声明样式和样式之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4585808/
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年