XML布局文件于Java代码使用问题
2013-9-21
问题一、不同的XML文件中相同类型的控件id相同,那么将这些不同的布局xml组合在一个大的布局中,如何解决相同id问题 ?
解决办法: 不同的布局文件XML要组合成一个新的大布局,必须使用include加载各个不同的xml,那么在这不同的XML文件组合到一起时,难免会有些空间的id有冲突,如果在主页面仍然利用this.findViewById(R.id.xxx)时找相应的控件时,编译器只会识别第一个,而后面的可能不会识别,所以,在利用include加载各个xml时,此时incldue在某种意义上讲已经是一个view了,那么给该include都命名一个不同的id,然后通过该id找该View的任何控件。
例如:
问题二、如何将一个组件或者布局控件隐藏起来不显示,等到需要显示的时候显示?
问题四、findViewById()方法的使用
利用findByViewById(),就是利用id寻找相应的VIew的
问题五、如何将一个xml文件(例如布局xml文件)变成一个View?
解决办法:LayoutInflater layoutInflater = LayoutInflater.from(this);
问题六、不同的activity之间有相同的布局方式(一般出现在次业务中),比如都是上中下布局方案,只是各个部分里面的内容以及显现的View不同,如何有效实现?
解决办法:一个概念,这种情况一般是有一个主业务,然后主业务中有次业务,那么功能的切换按钮在主界面上,按不同的按钮,切换不同的视图,但是这些不同的视图的布局结构相同。但切记的是,各个次业务界面必须给出明确的退出按钮,该按钮调用finish()方法即可。
首先建立一个基类布局文件,加载一个共同的布局方案,比如上下结构布局基类,base.xml加载了两个xml布局,其中上为标题相同的部分title.xml,下部为不同的部分,可以是不同xml来替换,根据选择的按钮来替换,比如1.xml和2.xml。
第二、建立一个baseActivity.java继承activity,在该java文件中实例化各个控件,View以及事件(退出以及其他自己的事件)即控件中必须包含一个退出该界面的按钮。并且在在onCreate()方法内部设置init()方法。1.xml和2.xml对应的activity java文件1.java和2.java继承baseactivity,然后重写init()方法,这样也就可以设置各自不同的内容了。
第三、这里需要注意的是,用1.java为例:在该方法init()中需要将其对应的xml文件(1.xml)转换成一个View,同时将base.xml里面加载的下部的xml布局文件移除,然后添加自己进去,也就是1.xml。具体方法为:
baseLinear.addView(temp, 1);
其中,baseLinear为
base.xml主文件的view,infoView为base.xml加载的下部文件的View。
最后,功能的切换,也就是显示不同视图的事件在主界面上给出即可。
问题七、同一个activity中有多项功能,各个功能布局结构相同(一般出现在主业务中),但是按不同的功能控件(比如按钮)切换不同的功能View,如何有效实现?
解决办法:利用信息隐藏,先将所有的布局加载到一个主布局当中去,也就是各个功能的View利用include加载到主布局当中去,然后默认一个启动主页面的显示View,其他的都利用andriod:visibility:"gone"将其隐藏,然后点击相应功能按钮时,将其显示利用XXXX.setVisibility(参数)方法。
例如,一个主布局有三部分组成,分别是上中下三部分,将这三部分的布局文件利用include加载到主布局当中,底部是是功能按钮,顶部是功能标题信息,中间是不同的功能,那么此时完全可以使用一个activity来实现这些功能的切换。即利用按钮选择事件,点击相应功能按钮,那么就将其View显示出来,其他的都隐藏,当然顶部的标题信息也可以做相应的修改。
问题八、在编译的过程中出现 error opening trace file:No such file or directory(2)?
解决办法:首先:
检查代码有没有写错,尤其是涉及到findViewById的时候,要小心,找想要的View必须通过其父亲找,一层一层找下去。通过该方法找View如果id找不到,可能会出现此种情况。
第二:这个错误还可能是你的android API 和当前虚拟器版本不一样导致的。
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
问题九:两者之间的区别
getReadableDatabase();
getWritableDatabase();