0

Я пытаюсь создать 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). Я пробовал это, и теперь динамически установленная ширина соблюдается.

+0

Это сообщение о статусной строке? – Karakuri

+0

Это для установки bigContentView в уведомлениях. Спасибо –

+0

Тогда я не понимаю ваш вопрос. Пользовательский интерфейс уведомлений строки состояния настраивается с помощью «RemoteViews», а не путем нормального просмотра инфляции и модификации. Возможно, вам следует уточнить, что вы спрашиваете, и добавить дополнительные фрагменты кода. – Karakuri

ответ

0

Я наткнулся на этот SO-поток, где заметил, что при раздувании вместо указания null в качестве родительского элемента был указан новый LinearLayoutParams (contex). Я пробовал это и сейчас, динамически установленная ширина соблюдается.