setContentView(R.layout.main) 可以动态实现吗?

时间:2022-07-13 20:52:16
在开发过程中,发现setContentView(R.layout.main);这条语句在执行前有个前提,那就是必须先build工程,可不可以使用其它方法实现这个功能啊?有没有什么get方法可以代替啊?求大侠指导。。。
另外如果用setContentView(R.layout.main);这样来实现,main.xml是什么样的?具体到value值,本人小菜鸟一个,求大神指导。。越详细越好,不甚感激啊!~

8 个解决方案

#1


通过layoutInflate来inflate呗

#2


main.xml是你UI布局文件,R.layout.main嘛其实就是个ID号,这样才能找到这个main.xml布局文件进行布局。
setContentView也可以是直接setContentView(View view),view是你要设置的视图类

#3


引用 2 楼 sagittarius1988 的回复:
main.xml是你UI布局文件,R.layout.main嘛其实就是个ID号,这样才能找到这个main.xml布局文件进行布局。
setContentView也可以是直接setContentView(View view),view是你要设置的视图类

赞一个

#4


看二楼

从描述看,楼主对Android Project基本结构不了解,给你个链接学习一下:
http://www.cnblogs.com/chunhui588/archive/2010/07/16/android-project-structure.html

setContentView包括其重载方法都可以动态调用,调用后整个界面就会被替换

一楼说的inflater是动态加载布局,常用于ListView、GridView等Item的实现,可以动态加载一个xml布局,然后就可以使用了

#5


Android Project基本结构多少我还是了解一些的,我只是觉得这样创建视图方法有些太死了,想用其它方法来实现。尤其是对gen里的R的使用,因为有很多时候我们不方便直接使用 R,请问有其它方法吗?请问有其它方法吗? setContentView(R.layout.main) 可以动态实现吗?

#6


引用 5 楼 cuihao1234 的回复:
Android Project基本结构多少我还是了解一些的,我只是觉得这样创建视图方法有些太死了,想用其它方法来实现。尤其是对gen里的R的使用,因为有很多时候我们不方便直接使用 R,请问有其它方法吗?请问有其它方法吗? setContentView(R.layout.main) 可以动态实现吗?


Android的设计就是布局文件根据其名称在R.java内生成对应的ID,然后使用R.layout.xxx来获取布局文件。

不方便直接使用R?未见过这种需求。

#7


自己建viewgroup然后自己一个个view来add
或者自己建canvas 自己绘制
只是少量改动的话 自己重载一个view 然后实现inflate或者ondraw吧

#8


本人来结帖了,哈哈。。。来,我告诉你们怎么动态取R哈,会的可以不看哈~
方法一:
Resources resources = mContext.getResources();
//获取layout文件夹底下的文件的id号
int indentify = resources.getIdentifier(mContext.getPackageName()+":layout/"+"startview", null, null);
方法二:
Resources mRes = mContext.getResources();
int iTitleID = mRes.getIdentifier("quit_dlg_title", "string", mContext.getPackageName());
其实就是用其它方法取代直接调用R的这么一个实现,为什么有这个需求?太简单了,如果做一个项目要用到多个平台,那你的包名要按平台的需求来改,那你程序里要改来改去,岂不烦死?这招好不好使用了再说,哇哈哈!~~是不是很得瑟啊?其实这是俺公司一大牛帮我解决的,厉害啊!~

#1


通过layoutInflate来inflate呗

#2


main.xml是你UI布局文件,R.layout.main嘛其实就是个ID号,这样才能找到这个main.xml布局文件进行布局。
setContentView也可以是直接setContentView(View view),view是你要设置的视图类

#3


引用 2 楼 sagittarius1988 的回复:
main.xml是你UI布局文件,R.layout.main嘛其实就是个ID号,这样才能找到这个main.xml布局文件进行布局。
setContentView也可以是直接setContentView(View view),view是你要设置的视图类

赞一个

#4


看二楼

从描述看,楼主对Android Project基本结构不了解,给你个链接学习一下:
http://www.cnblogs.com/chunhui588/archive/2010/07/16/android-project-structure.html

setContentView包括其重载方法都可以动态调用,调用后整个界面就会被替换

一楼说的inflater是动态加载布局,常用于ListView、GridView等Item的实现,可以动态加载一个xml布局,然后就可以使用了

#5


Android Project基本结构多少我还是了解一些的,我只是觉得这样创建视图方法有些太死了,想用其它方法来实现。尤其是对gen里的R的使用,因为有很多时候我们不方便直接使用 R,请问有其它方法吗?请问有其它方法吗? setContentView(R.layout.main) 可以动态实现吗?

#6


引用 5 楼 cuihao1234 的回复:
Android Project基本结构多少我还是了解一些的,我只是觉得这样创建视图方法有些太死了,想用其它方法来实现。尤其是对gen里的R的使用,因为有很多时候我们不方便直接使用 R,请问有其它方法吗?请问有其它方法吗? setContentView(R.layout.main) 可以动态实现吗?


Android的设计就是布局文件根据其名称在R.java内生成对应的ID,然后使用R.layout.xxx来获取布局文件。

不方便直接使用R?未见过这种需求。

#7


自己建viewgroup然后自己一个个view来add
或者自己建canvas 自己绘制
只是少量改动的话 自己重载一个view 然后实现inflate或者ondraw吧

#8


本人来结帖了,哈哈。。。来,我告诉你们怎么动态取R哈,会的可以不看哈~
方法一:
Resources resources = mContext.getResources();
//获取layout文件夹底下的文件的id号
int indentify = resources.getIdentifier(mContext.getPackageName()+":layout/"+"startview", null, null);
方法二:
Resources mRes = mContext.getResources();
int iTitleID = mRes.getIdentifier("quit_dlg_title", "string", mContext.getPackageName());
其实就是用其它方法取代直接调用R的这么一个实现,为什么有这个需求?太简单了,如果做一个项目要用到多个平台,那你的包名要按平台的需求来改,那你程序里要改来改去,岂不烦死?这招好不好使用了再说,哇哈哈!~~是不是很得瑟啊?其实这是俺公司一大牛帮我解决的,厉害啊!~