0

У меня есть настраиваемое представление, которое в основном просто, чтобы показать некоторую информацию для сделки, это расположение:вес LinearLayout не работает в DialogFragment

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:background="#a8d1ff" 
    android:weightSum="8"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="2" 
     android:orientation="vertical" 
     android:weightSum="6"> 

     <FrameLayout 
      android:id="@+id/leftPartRowOneRelativeLayout" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="3"> 

      <ImageView 
       android:id="@+id/nzNumberImageView" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:adjustViewBounds="true" 
       android:scaleType="fitXY" 
       android:src="@drawable/transaction_view_leftupside_nz_test" /> 

      <TextView 
       android:id="@+id/nzNumberTextView" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:gravity="right" 
       android:text="18" 
       android:textSize="40dp" /> 
     </FrameLayout> 

     <ImageView 
      android:id="@+id/productNumberImageView" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="3" 
      android:adjustViewBounds="true" 
      android:scaleType="fitXY" 
      android:src="@drawable/transaction_view_leftdownside_product_test" /> 
    </LinearLayout> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/trx_summary_LinearLayout" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="6" 
     android:weightSum="10" 
     android:orientation="vertical"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="3" 
      android:textSize="20dp" 
      android:textColor="#FF000000" 
      android:id="@+id/palceHolder0" android:text="testRow0"/> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="3" 
      android:textSize="20dp" 
      android:textColor="#FF000000" 
      android:id="@+id/palceHolder1" android:text="testRow1"/> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="4" 
      android:textSize="20dp" 
      android:textColor="#FF000000" 
      android:id="@+id/palceHolder2" android:text="testRow2"/> 
    </LinearLayout> 
</LinearLayout> 

Это его, как он выглядит в Android Studio просмотра, и это отвечают мои ожидания (левый и правый разделим полный родительский контейнер с соотношении 2: 6):

looks good

Позже эта точка зрения будет показано в DialogFragment, и это onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) для DialogFragment:

MyView mv = new MyView(getActivity().getBaseContext()); 
mv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
return mv; 

Но теперь, вес 2: 6 кажется не работать больше в всплывающем Dialog :

not good

Я использую Android 6.

Может ли кто-нибудь помочь?

[edit0]: Я хочу Dialog шоу в ширину экрана, но половину высоты экрана, поэтому я ставлю этот код в MyDialogFragment:

@Override 
public void onResume() { 
    ViewGroup.LayoutParams params = getDialog().getWindow().getAttributes(); 
    params.width = ViewGroup.LayoutParams.MATCH_PARENT; 
    params.height = this.height; 
    getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); 
    super.onResume(); 
} 

что this.height передаваемая bundle, который является screen height/2.

ответ

0

Обязательно используйте match_parent (или фиксированные размеры) везде, где есть дело с layout_weight. Если вы в какой-то момент используете wrap_content, макет будет корректировать размер своих детей и игнорировать их значения веса.

В вашем случае вы указываете wrap_content при раздувании диалогового окна. Это должно быть match_parent вместо:

MyView mv = new MyView(getActivity().getBaseContext()); 
mv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
return mv; 

Также убедитесь, что само диалоговое окно имеет фиксированную ширину или match_parent.

+0

Я установил 'Match_Parent' как код, который вы вставили, но я не буду устанавливать его для' Dialog', потому что я не хочу, чтобы окно диалога занимало весь экран, я просто хочу сделать его полуэкранным высота. И я провел тестирование, результат все тот же. – Shawn

+0

@Shawn Можете ли вы установить фиксированную ширину/высоту (например, '300dp' или около того) на представление? Если это решает проблему веса, вы можете вычислить соответствующий размер для диалога во время выполнения и установить его как его ширину/высоту. – Floern

+0

Я пробовал 'mv.setLayoutParams (новый ViewGroup.LayoutParams (900, 300));' как вы и предполагали, но все тот же – Shawn

Смежные вопросы