/ / LayoutParamsを使用してFrameLayoutからマージンをプログラムで削除します-android、relativelayout、classcastexception、framelayout

LayoutParamsでFrameLayoutの余白をプログラムで削除する - アンドロイド、relativelayout、classcastexception、framelayout

私は次のようなFrameLayoutを持っています:

 <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<FrameLayout
android:layout_marginTop="56dp"
android:layout_marginBottom="50dp"
android:id="@+id/main_frag"
android:layout_width="match_parent"
android:layout_height="match_parent" />

// other stuff


</RelativeLayout>

ただし、プログラムでマージンを変更すると、ClassCastExceptionが発生します。

        FrameLayout fl = (FrameLayout) findViewById(R.id.main_frag);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fl.getLayoutParams();
params.setMargins(50, 0, 0, 0);
fl.setLayoutParams(params);

これが私が試している方法です:

        FrameLayout fl = (FrameLayout) findViewById(R.id.main_frag);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fl.getLayoutParams();
params.setMargins(50, 0, 0, 0);
fl.setLayoutParams(params);

ここは LogCat

04-25 16:18:08.385: E/AndroidRuntime(27682): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.---.---/com.------.---.MainFragmentActivity}: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.ActivityThread.access$800(ActivityThread.java:148)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.os.Handler.dispatchMessage(Handler.java:102)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.os.Looper.loop(Looper.java:135)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.ActivityThread.main(ActivityThread.java:5312)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at java.lang.reflect.Method.invoke(Native Method)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at java.lang.reflect.Method.invoke(Method.java:372)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
04-25 16:18:08.385: E/AndroidRuntime(27682): Caused by: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.FrameLayout$LayoutParams
04-25 16:18:08.385: E/AndroidRuntime(27682):    at com.---.---.MainFragmentActivity.onCreate(MainFragmentActivity.java:81)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.Activity.performCreate(Activity.java:5953)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
04-25 16:18:08.385: E/AndroidRuntime(27682):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)

私はどのように RelativeLayout ここに関与していますか?

回答:

回答№1の場合は3

LayoutParams クラスは、子ではなく親によって決定されます。ザ・ LayoutParams に影響を与える FrameLayout 〜です RelativeLayout.LayoutParams。ザ LayoutParams に影響を与える FrameLayout あなたは FrameLayout.LayoutParams.