[英]Android drawable resource id conflict?
我已經將ZXing 1.7的/ android項目設置為我的主要Android應用程序項目引用的庫。 作為快速測試/概念驗證,我使用了CaptureActivity,其方式與此處描述的相同: http : //damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcod ...
事實上,事情運作良好,我可以啟動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在/ drawable中,是一個可繪制的選擇器:
<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>
困擾的問題是:當我以手勢方向握住手機並啟動CaptureActivity時,我看到scan_btn_pressed圖像在顯示屏上伸展,另一個副本也延伸到“在取景器矩形文本中放置條形碼”。 “。 僅當我以橫向方向握住手機時啟動活動時才會出現這種情況。
我發現如果我更換
android:drawableTop="@drawable/btn_scan_drawable"
同
android:drawableTop="@drawable/scan_btn_pressed"
問題消失了,一切都運行良好,但我想讓它與選擇器一起工作(並理解問題發生的原因)。 如何從我的活動的UI神秘地顯示出另一個活動? 我是Android開發的新手,但我一直在谷歌上搜索並整天處理這個問題,我似乎無法找到為什么會發生這種情況,除了對android文檔中的資源ID沖突的一些模糊引用。
注意:我只使用CaptureActivity作為快速原型/概念驗證。 我將利用ZXIng庫為最終應用程序實現自己的活動。
好吧,看起來Android平台在使用庫項目時有一些皺紋。 我注意到我的項目的R類和ZXIng庫項目的R類在各地都存在沖突,例如
public static final class id {
...
public static final int mainmenu_btn_scan=0x7f070028;
...
在圖書館項目的R類中:
public static final class id {
...
public static final int share_app_button=0x7f070028;
...
這解釋了我的活動中的UI元素是如何被庫項目中的活動拾取的。 Android將優先考慮主項目中的資源ID。
這篇優秀的文章提供了解決方案: http : //blog.blackmoonit.com/2010/12/android-sharing-resources-in-eclipse.html
在CaptureActivity(我在庫中調用的活動)中,我替換了
viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
有了這個
viewfinderView = (ViewfinderView) findViewById(
getResources().getIdentifier("viewfinder_view", "id", getPackageName()) );
這解決了這個問題,雖然我需要通過getIndentifier()替換所有直接id引用,以確保沒有任何其他沖突。 不是理想的解決方案。 感覺應該對aapt工具進行一些相當直接的擴展,以確保R類之間的ID不會發生沖突。
有關詳細信息,請參閱此處: http : //devmaze.wordpress.com/2011/05/22/android-application-android-libraries-and-jar-libraries/
使用project->clean..
重新生成R
類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.