android - 使用 LayoutParams 以编程方式从 FrameLayout 中删除边距

标签 android android-relativelayout classcastexception android-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

最佳答案

LayoutParams 类由父级而不是子级指定。影响 FrameLayoutLayoutParams 是一个 RelativeLayout.LayoutParams。影响 FrameLayoutchildLayoutParams 将是 FrameLayout.LayoutParams

关于android - 使用 LayoutParams 以编程方式从 FrameLayout 中删除边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29871828/

相关文章:

Android RelativeLayout 选择器 state_pressed 不起作用

java - 如何从对象中获取 boolean 值

java - hdpi 和 xhdpi 手机的不同尺寸

android - 如何在 android 中以编程方式启动带有数字 0 到 9 和 + 的软电话类型键盘?

android - 应用程序在 native 代码中的外部存储路径

android - 更改绘图名称后 Android 中的 ClassCastException?

java - 错误将字符串转换为日期 : ClassCastException

android - 如何防止我的应用程序在使用 JSON 数据时意外崩溃 "force close"并改为处理异常?

android - 垂直居中按钮,同时限制高度

android - 如何在 android 中使用 ScrollView 固定页脚?