我设置了ZXing 1.7的/ android项目作为我的主android应用程序项目引用的 库。作为概念的快速测试/证明,我 已经使用了CaptureActivity,以同样的方式如下所述: http://damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcod ...Android可绘制资源ID冲突?
大多数情况下,工作的事情好了,我可以启动CaptureActivity和接收 扫描数据在我推出它的活动中。但是,我得到了一些非常奇怪的行为,我认为这可能与我的项目和/ android ZXing项目之间的资源ID 冲突有关。这 将需要一些解释,所以请多多包涵......
我启动CaptureActivity与此代码:
Button scanBtn = (Button)findViewById(R.id.mainmenu_btn_scan);
scanBtn.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View v)
{
Intent i = new Intent("com.google.zxing.client.android.SCAN");
i.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(i, SCAN_CODE);
}
});
mainmenu_btn_scan
在menu.xml文件中定义:
<LinearLayout android:id="@+id/mainmenu_view" style="@style/MainMenu" xmlns:android="http://schemas.android.com/apk/res/android">
...
<Button android:id="@+id/mainmenu_btn_scan"
android:drawableTop="@drawable/btn_scan_drawable"
style="@style/MainMenuButton"
android:text="Scan"/>
...
</LinearLayout>
btn_scan_drawable。 xml是/可绘制的,并且是可绘制的选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/scan_btn_pressed" android:state_focused="true" android:state_pressed="true" />
...
</selector>
的STANGE问题是这样的:当我拿着手机在lanscape 方向并推出CaptureActivity,我看到了scan_btn_pressed 图像在整个显示拉长,并且它的另一个副本也 跨越拉伸“内放置一个条形码取景器矩形 文字...“。这只发生在我推出活动的同时拿着 的手机风景的方向。
我发现,如果我有
android:drawableTop="@drawable/scan_btn_pressed"
问题就没有了,一切都完美的作品,但我想要得到它与选择的工作取代
android:drawableTop="@drawable/btn_scan_drawable"
(和理解为什么这个问题发生)。如何从我的 活动的用户界面中抽取出一个神奇的东西来显示在另一个活动中?我是Android开发的新手,但我一直在使用Google和Google这方面的工作,似乎无法找到为什么会发生这种情况,除了在Android文档中对资源ID冲突的模糊引用之外。
注意:我正在使用CaptureActivity作为快速原型/验证概念。我将利用Zxxng库实现我自己的最终应用程序。
我认为这是一个漫长的解决方案 - 您也可以确保导入正确的R,或者使用your.package.R.id.viewfinder_view来区分。这更多是Java进口的问题。这也突出了重复使用不意味着被复制的项目的问题,而不是作为图书馆项目。 –
我不这么认为,真正的问题是R类中的ID有冲突。 com.somelib.R.share_app_button == com.myapp.R.mainmenu_btn_scan,正在使用正确的R文件,但由于冲突和Android的资源优先级规则,库的R文件ID最终会引用我应用程序中的资源。 –
@SeanOwen:资源ID冲突发生是因为不同项目中的多个资源被映射到相同的整数ID值。无论您是否使用软件包名称来限定您的Java代码,它们都映射到相同的值。当Android运行时被赋予整数ID值来查找某些内容时,它没有帮助它解决冲突的信息,因此它只能遵循预定义的资源优先级规则,这在很多情况下会导致错误的结果。 – rwong