android setLayoutParams does not take effect problem

Invalid code:

public void initSpeedView(boolean hasPark) {
    lightNavSpeedView = new LightNavSpeedView(getNaviActivity());
    RelativeLayout.LayoutParams lightNavSpeedViewLayoutParams = getWrapLayoutParams();
    lightNavSpeedViewLayoutParams
            .addRule(RelativeLayout.END_OF, lightNavGuideView.getView().getId());
    int leftMargin = hasPark ?
    getDimen(R.dimen.light_nav_speed_view_margin_left)
            - (getDimen(R.dimen.navi_end_card_panel_width)
            - getDimen(R.dimen.light_navi_route_guide_panel_width))
                    :getDimen(R.dimen.light_nav_speed_view_margin_left);
    lightNavSpeedViewLayoutParams.setMargins(
            leftMargin,
            getDimen(R.dimen.light_nav_speed_view_margin_top),
            getDimen(R.dimen.light_nav_speed_view_margin_right),
            getDimen(R.dimen.light_nav_speed_view_margin_bottom));
    if (mViewGroup.findViewById(R.id.linearLightNavSpeedRootView) != null) {
        mViewGroup.findViewById(R.id.linearLightNavSpeedRootView).setLayoutParams(lightNavSpeedViewLayoutParams);
    } else {
        mViewGroup.addView(lightNavSpeedView.getView(), lightNavSpeedViewLayoutParams);
    }
}

There are two solutions:

The first way is to use remove and then add:

if (mViewGroup.findViewById(R.id.linearLightNavSpeedRootView) != null) {

    mViewGroup.removeView(mViewGroup.findViewById(R.id.linearLightNavSpeedRootView));

}

mViewGroup.addView(lightNavSpeedView.getView(), lightNavSpeedViewLayoutParams);

public void initSpeedView(boolean hasPark) {
        lightNavSpeedView = new LightNavSpeedView(getNaviActivity());
        RelativeLayout.LayoutParams lightNavSpeedViewLayoutParams = getWrapLayoutParams();
        if (ChannelUtil.isC1YCChannel()) {
            lightNavSpeedViewLayoutParams.width = getDimen(R.dimen.navi_rg_interval_camera_bg_size);
            lightNavSpeedViewLayoutParams.height = getDimen(R.dimen.navi_rg_interval_camera_bg_size);
        }
        lightNavSpeedViewLayoutParams
                .addRule(RelativeLayout.END_OF, lightNavGuideView.getView().getId());
        int leftMargin = hasPark?
        getDimen(R.dimen.light_nav_speed_view_margin_left)
                - (getDimen(R.dimen.navi_end_card_panel_width)
                - getDimen(R.dimen.light_navi_route_guide_panel_width))
                        :getDimen(R.dimen.light_nav_speed_view_margin_left);
        lightNavSpeedViewLayoutParams.setMargins(
                leftMargin,
                getDimen(R.dimen.light_nav_speed_view_margin_top),
                getDimen(R.dimen.light_nav_speed_view_margin_right),
                getDimen(R.dimen.light_nav_speed_view_margin_bottom));
        if (mViewGroup.findViewById(R.id.linearLightNavSpeedRootView) != null) {
            mViewGroup.removeView(mViewGroup.findViewById(R.id.linearLightNavSpeedRootView));
        }
        mViewGroup.addView(lightNavSpeedView.getView(), lightNavSpeedViewLayoutParams);
    }

The second method is to change the xml layout and align the right alignment:

Core change: RelativeLayout.END_OF changed to: RelativeLayout.ALIGN_LEFT,

lightNavSpeedViewLayoutParams
        .addRule(RelativeLayout.ALIGN_LEFT, lightNavGuideView.getView().getId());
 private void initSpeedView() {
        lightNavSpeedView = new LightNavSpeedView(getNaviActivity());
        RelativeLayout.LayoutParams lightNavSpeedViewLayoutParams = getWrapLayoutParams();
        if (ChannelUtil.isC1YCChannel()) {
            lightNavSpeedViewLayoutParams.width = getDimen(R.dimen.navi_rg_interval_camera_bg_size);
            lightNavSpeedViewLayoutParams.height = getDimen(R.dimen.navi_rg_interval_camera_bg_size);
        }
        lightNavSpeedViewLayoutParams
                .addRule(RelativeLayout.ALIGN_LEFT, lightNavGuideView.getView().getId());
        lightNavSpeedViewLayoutParams.setMargins(
                getDimen(R.dimen.light_nav_speed_view_margin_left)
                        +  getDimen(R.dimen.light_navi_route_guide_panel_width),
                getDimen(R.dimen.light_nav_speed_view_margin_top),
                getDimen(R.dimen.light_nav_speed_view_margin_right),
                getDimen(R.dimen.light_nav_speed_view_margin_bottom));
        mViewGroup.addView(lightNavSpeedView.getView(), lightNavSpeedViewLayoutParams);
    }

Guess you like

Origin blog.csdn.net/chengzhenjia/article/details/131937828