我的Android应用有两种布局,一种用于<= normal
,另一种用于>= large
。在这两种情况下,我都可以重复使用99.9%的相应活动,但我需要知道这两种布局的不同信息。我当然可以写一个巨大的if
表达式,但我宁愿让Android发挥其魔力,因为它已经通过加载两种不同的布局来实现它。
那么,我可以在两个XML文件中嵌入信息并在我的活动类中检索它们吗?或者我完全不在地图上,正确的方法是完全不同的?
答案 0 :(得分:1)
当然可以,只需在values目录中定义每个大小的值,并在程序中动态检索它们。
/res/values-xxx
-> a.xml
/res/values-yyy
-> a.xml
...
这是一个例子:
<resources>
<integer name="maximum">100</integer>
...
</resources>
你的程序中的就是:
int max = getContext().getResources().getInteger(R.integer.maximum);
对于每个尺寸的android都会神奇地完成这项工作并给你正确的价值!
答案 1 :(得分:1)
如果您愿意使用自定义View路线,那么是的,您可以。您需要做的是创建自定义属性并将它们应用于自定义视图,这些视图在创建时会被解析。 Here is a thread that goes in to a great bit of detail about it.
观点本身并不一定特别。你可以说,有一个名为PropertyView
视图的视图扩展了FrameLayout
,并且有一个名为getProperty()
的方法。然后将属性放在XML中,如下所示:
<com.example.ProperyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:property="My Custom Property"/>
然后你将使用该链接中描述的方法解析它。
编辑:
或者,XML格局中还有其他元素可以放入存储区,类似于布局。 /res
文件夹中的任何文件夹都可以具有与布局相同的存储桶。其中包括values
,drawables
,raw
或xml
个文件夹中的所有内容。您可以在布局中引用这些内容,Android系统会选择您想要的内容。 More example for how dimens work.
答案 2 :(得分:1)
如果使用值来区分两种布局,则可以根据屏幕大小设置不同的重载值。见answer.
你可以使用layouts目录做同样的事情来创建不同的布局,但是然后使用 < include > 标签使用常见的子部分来根据公共部分制作不同的视图。
或两者的结合。如果您想要更改活动/片段的行为,则可以在存在丢失或存在的屏幕小部件时键入该行为。