我試圖做這樣的底級菜單充氣繪製從XML
<LinearLayout
android:id="@+id/bottomBar"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true" >
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- First item of the menu -->
<ImageButton
android:id="@+id/BConex1"
android:contentDescription="@string/desc_gen_image"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:layout_gravity="left"
android:background="@drawable/menu_bottom"
android:layout_marginLeft="4dp" />
<!-- Second item of the menu -->
<ImageButton
android:id="@+id/BConex2"
android:contentDescription="@string/desc_gen_image"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:layout_gravity="left"
android:background="@drawable/menu_bottom"
android:layout_marginLeft="4dp" />
<!-- ... Some additional items in the menu -->
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
的@繪製/ menu_bottom是這樣定義的一個圖層列表:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1px"
android:color="#55ffffff" />
<padding
android:left="16px"
android:top="6px"
android:right="16px"
android:bottom="6px" />
<solid
android:color="#cc000000" />
<gradient
android:startColor="#222222"
android:centerColor="#111111"
android:endColor="#000000"
android:angle="-90" />
<corners
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
</shape>
</item>
<item>
<bitmap
android:src="@+drawable/bitmap_to_change"
android:tileMode="disabled"
android:width="30dp"
android:height="15dp"
android:gravity="center" />
</item>
</layer-list>
現在的事情是:我想用exac tly與菜單中每個按鈕的背景相同,但位圖的src字段除外。我試着使用LayoutInflater按鈕中的一個,並試圖以編程方式改變它,就像這樣:
View first = LayoutInflater.from(this).inflate(R.drawable.menu_bottom, null);
first.findViewById(R.drawable.bitmap_to_change).setBackground(this.getResources().getDrawable(R.drawable.another_resource));
但這返回一個例外:
11月12日至11日:35:53.556: E/AndroidRuntime(897):了java.lang.RuntimeException: 無法啓動活動ComponentInfo {XXX.MainActivity}: android.view.InflateException:二進制XML文件行#2:錯誤 充氣類層列表
所以我認爲這不是正確的方法。有沒有辦法做到這一點,而不是爲每個菜單項定義一個XML文件?
謝謝!
----------- -----------編輯
我找到了一個「髒」的解決方法來實現我的目標:讓背景其中一個按鈕作爲LayerDrawable,並用正確的Bitmap替換。這不是我想要做的方式(因爲我完全以編程方式需要它),也不是原來的問題,所以我不打算回答自己讓問題打開,希望有人能夠幫助,但這是我的現在做:
我分配一個ID,XML文件中的相應的 「項目」:
<item android:id="@+id:bitmap_layer">
而且編程:
ImageButton firstButton = (ImageButton) findViewById(R.id.BConex1);
LayerDrawable bg = (LayerDrawable) firstButton.getBackground();
bg.setDrawableByLayerId(R.id.bitmap_layer, getResources().getDrawable(R.drawable.the_new_drawable));