0

LinearLayout 매개 변수를 프로그래밍 방식으로 설정할 수 없습니다. 내가 시도한 모든 것, 나는이 정확한 예외를 얻는다.

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) outerLayout.getLayoutParams(); 
params.bottomMargin = 50; 
outerLayout.setLayoutParams(params); 


java.lang.ClassCastException: android.widget.AbsListView$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 

왜 그런지는 모르겠지만, 나는 LinearLayout.LayoutParams를 뷰에서 가져올 수 없다. outerLayout은 내 LinearLayout입니다. findViewById()를 사용하여 인스턴스화합니다. 나는 여러 가지를 가져 왔지만 행운은 없었다.

다음은 목록보기에서 하나의 항목을 나타내는 내 xml입니다. outer_item_layout은 getLayoutParams()를 호출하는 레이아웃입니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/outer_item_layout" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="30dp" 
     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/modeName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="16dp" 
      android:layout_marginRight="16dp" 
      android:layout_weight="3" 
      android:text="Medium Text" 
      android:textSize="18dp" /> 

     <ImageView 
      android:id="@+id/dropdown_speed" 
      android:layout_width="23dp" 
      android:layout_height="23dp" 
      android:layout_gravity="center" 
      android:layout_marginRight="20dp" 
      android:background="?selectableItemBackgroundBorderless" 
      android:clickable="true" 
      android:src="@drawable/ic_dropdown" 
      tools:ignore="InvalidId" /> 
    </LinearLayout> 
</LinearLayout> 

<LinearLayout 
    android:id="@+id/expandable_seekbar" 
    android:layout_width="match_parent" 
    android:layout_marginBottom="-50dip" 
    android:visibility="gone" 
    android:layout_height="50dip" 
    android:orientation="horizontal"> 

    <SeekBar 
     android:id="@+id/custom_mode_speed_seekbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="16dp" /> 

</LinearLayout> 

+2

레이아웃 게시 xml. –

+0

아래쪽 여백을 프로그래밍 방식으로 설정하려고하는 이유는 무엇입니까? –

+1

정말로 필요한 경우, 루트 LinearLayout 내에 다른 LinearLayout 컨테이너를 추가하고 조작 할 수 있습니다. –

답변

0

뷰의 getLayoutParams() 호출의 반환 형식이 아니라 해당 뷰의 부모의 종류에, 뷰의 종류에 의존하지 않는다. 따라서 outerLayoutLinearLayout인데도 레이아웃 매개 변수는 무엇이든 될 수 있습니다.

당신의 outerLayout보기 outerLayout.getLayoutParams()의 결과 유형 AbsListView.LayoutParams의 이유입니다 ListView 어떤 종류의 내부에 호스팅되고있는 것으로 보인다.

+0

예, ListView 내부에서 호스팅됩니다. 목록 뷰 어댑터 내에서 이러한 LinearLayout 매개 변수를 가져 오려고합니다. 부모 (ListView) 대신 레이아웃의 매개 변수를 얻을 수있는 방법이 있습니까? – orglce

+1

@orglce'LayoutParams'의 목적은 부모에게 레이아웃하는 법에 대한 정보를 제공하는 것입니다. 그래서 "부모 대신 레이아웃의 매개 변수"라는 개념이 실제로 존재하지 않습니다. 오직 부모 만이 신경을 씁니다. 아이를 배치. _margin_이 아닌 LinearLayout의 하단 _padding_을 설정하면이 특정 문제를 해결할 수 있습니다. –

관련 문제