2017-10-24 7 views
0

2つのcardview要素のレイアウト幅をMATCH_PARENTと0dpの間で変更しようとしています。私は、XMLの変更を介してシナリオをシミュレートするとき、それは正しいですが、私はそれをプログラムで行うとき、期待どおりレンダリングされていません。linearlayout内のcardviewのレイアウト幅をプログラムでどのように設定しますか?

XML

 <LinearLayout 
      android:id="@+id/lDates" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginStart="@dimen/card_margins" 
      android:layout_marginEnd="@dimen/card_margins" 
      android:layout_below="@id/lnrButtons" 
      android:orientation="horizontal"> 

      <android.support.v7.widget.CardView 
       android:id="@+id/cardSectionA" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       app:cardElevation="0dp" 
       android:layout_marginEnd="@dimen/card_margins" 
       android:layout_marginBottom="@dimen/card_margins" 
       app:cardCornerRadius="4dp" 
       android:layout_weight="1"> 

       <TextView 
        android:id="@+id/textLabelA" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:text="@string/sample_value"/> 

      </android.support.v7.widget.CardView> 

      <android.support.v7.widget.CardView 
       android:id="@+id/cardSectionB" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       app:cardElevation="0dp" 
       android:layout_marginEnd="@dimen/card_margins" 
       android:layout_marginBottom="@dimen/card_margins" 
       app:cardCornerRadius="4dp" 
       android:layout_weight="1"> 

       <TextView 
        android:id="@+id/textLabelB" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/sample_value"/> 

      </android.support.v7.widget.CardView>       
     </LinearLayout>  

javaの

//as-is scenario; cardSectionA and cardSectionB should be shown 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
     cardSectionA.getLayoutParams().width, 
     LinearLayout.LayoutParams.WRAP_CONTENT 
); 

cardSectionA.setLayoutParams(params); 
cardSectionB.setLayoutParams(params); 

//should only show cardSectionA scenario 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, 
     LinearLayout.LayoutParams.WRAP_CONTENT 
); 

cardSectionA.setLayoutParams(params); 

どうもありがとうございました。

答えて

0

予想どおりに動作するには、マージンとレイアウトの重みも設定する必要があります。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.MATCH_PARENT, 
     LinearLayout.LayoutParams.WRAP_CONTENT 
); 

int margin = 10; 
params.setMargins(margin, margin, margin, margin); 
params.weight = 1; 


cardSectionA.setLayoutParams(params); 
関連する問題