Я пытаюсь создать bitmap
для показа в уведомлении. Макет немного сложный, однако мне нужно установить ширину в соответствии с размером экрана. В XML, я в корне с LinearLayout
и я раздувать вид сандроид надувной вид не почитая динамически установленную ширину
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
не влияет на мнение ребенка надутого макета. Есть много вопросов вокруг i в 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);
Эта доступная_ширина была рассчитана динамически. Однако, когда я позже попытался создать Bitmap из этого завышенного представления, используя v.layout()
, он kep t генерирует изображение, которое не соблюдает установленную мной ширину.
Позже я наткнулся на this SO-нить, где я заметил, что при раздувании вместо указания null в качестве parentView был указан new LinearLayoutParams(contex)
. Я пробовал это, и теперь динамически установленная ширина соблюдается.
Это сообщение о статусной строке? – Karakuri
Это для установки bigContentView в уведомлениях. Спасибо –
Тогда я не понимаю ваш вопрос. Пользовательский интерфейс уведомлений строки состояния настраивается с помощью «RemoteViews», а не путем нормального просмотра инфляции и модификации. Возможно, вам следует уточнить, что вы спрашиваете, и добавить дополнительные фрагменты кода. – Karakuri