如何将信息从XML布局传递到其Activity类?

时间:2016-11-15 14:30:51

标签: android android-layout

我的Android应用有两种布局,一种用于<= normal,另一种用于>= large。在这两种情况下,我都可以重复使用99.9%的相应活动,但我需要知道这两种布局的不同信息。我当然可以写一个巨大的if表达式,但我宁愿让Android发挥其魔力,因为它已经通过加载两种不同的布局来实现它。

那么,我可以在两个XML文件中嵌入信息并在我的活动类中检索它们吗?或者我完全不在地图上,正确的方法是完全不同的?

3 个答案:

答案 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文件夹中的任何文件夹都可以具有与布局相同的存储桶。其中包括valuesdrawablesrawxml个文件夹中的所有内容。您可以在布局中引用这些内容,Android系统会选择您想要的内容。 More example for how dimens work.

答案 2 :(得分:1)

如果使用值来区分两种布局,则可以根据屏幕大小设置不同的重载值。见answer.

你可以使用layouts目录做同样的事情来创建不同的布局,但是然后使用 < include > 标签使用常见的子部分来根据公共部分制作不同的视图。

或两者的结合。如果您想要更改活动/片段的行为,则可以在存在丢失或存在的屏幕小部件时键入该行为。