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()でインスタンス化しています。私は別のものをインポートしようとしましたが運はありません。

ここは、リストビュー内の1つの項目を表すmy 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のbottom _padding_を設定することで解決できます。 –

関連する問題