我試圖生成一個bitmap
顯示在通知中。佈局有點複雜,但是,我需要根據屏幕尺寸設置寬度。在XML中,我在根LinearLayout
和我膨脹與android充氣視圖不尊重動態設置寬度
LinearLayout v = (LinearLayout) i inflater.inflate(R.layout.notification_expanded_detail, null, false);
這種佈局有相當一堆我需要填寫元件的視圖。它們的寬度取決於佈局本身的寬度,佈局的寬度因手機而異。我
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) available_width, LinearLayout.LayoutParams.WRAP_CONTENT);
v.setLayoutParams(params);
但是設置寬度爲膨脹的佈局,當我嘗試生成這個bitmap
,似乎與setLayoutParams
設置的大小是不影響充氣佈局的子視圖。 SO中有很多關於我的問題,但是,它們都是在擴充已經有rootView
的佈局,而且沒有任何效果。一些答案建議我在視圖上調用measure()
方法。但是,在調用度量方法之後,getMeasuredWidth
返回的寬度稍小於我用setLayoutParams
調用設置的寬度。我不太確定我在這裏錯過了什麼。任何幫助將非常感激。謝謝!
更新: 更多關於該問題的內容。我試圖展示一個有一個佔位符ImageView的通知,稍後我將使用從XML擴展的視圖生成的位圖來填充該通知。遠程視圖佈局是
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sliderViewBottom"
android:layout_width="match_parent"
android:layout_height="256dp"
android:background="@color/detail_page_blue"
android:clickable="true"
android:focusable="false"
android:orientation="vertical"
android:gravity="center"
android:padding="10dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/white"
>
<ImageView
android:id="@+id/progressImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#D05757"
android:gravity="center"
android:paddingBottom="8dp"
android:paddingTop="8dp"
>
<TextView
android:id="@+id/overAllDelay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delayed by "
android:textColor="@color/white"
/>
<TextView
android:id="@+id/overAllDelayVal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/overAllDelay"
android:text="-"
android:textColor="@color/white"
/>
</RelativeLayout>
</LinearLayout>
,我試圖膨脹併產生位圖從在progressImage
設置的佈局是
<RelativeLayout
android:id="@+id/swipe_page_track_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingLeft="@dimen/swipe_layout_info_card_track_margin"
android:paddingRight="@dimen/swipe_layout_info_card_track_margin"
>
<ImageView
android:id="@+id/fromGreenCircle"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentLeft="true"
android:layout_marginTop="1dp"
android:src="@drawable/from_green_circle"/>
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_alignParentRight="true"
android:layout_marginTop="1dp"
android:src="@drawable/station_end"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="4.5dp"
android:background="@drawable/swipe_page_empty_track"
/>
<ImageView
android:id="@+id/fromGreenTrack"
android:layout_width="105dp"
android:layout_height="3dp"
android:layout_alignParentLeft="true"
android:layout_marginTop="4.5dp"
android:src="@drawable/from_green_track"
/>
<ImageView
android:id="@+id/trackNavigationIcon"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginLeft="100dp"
android:src="@drawable/ic_track_detail_card_current_station_pointer"
/>
<TextView
android:id="@+id/currentStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/trackNavigationIcon"
android:layout_marginTop="10dp"
android:textColor="@color/black"
/>
</RelativeLayout>
我試圖膨脹該第二佈局與
LinearLayout v = (LinearLayout) i inflater.inflate(R.layout.notification_expanded_detail, null, false);
然後是使用
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) available_width, LinearLayout.LayoutParams.WRAP_CONTENT);
v.setLayoutParams(params);
這個available_width是動態計算的。但是,當我後來試圖通過使用v.layout()
從這個充氣視圖生成一個位圖時,它不會生成不符合我設置的寬度的圖像。
後來,我遇到了this SO線程,我注意到,雖然充氣,而不是指定null作爲父視圖,指定new LinearLayoutParams(contex)
。我試過,現在,動態設置的寬度正在兌現
這是爲了狀態欄通知? – Karakuri
它用於在通知中設置bigContentView。謝謝 –
然後我不明白你的問題。狀態欄通知UI是使用'RemoteViews'配置的,而不是通過正常的視圖膨脹和修改。也許你應該澄清你在問什麼,幷包含額外的代碼片段。 – Karakuri