使用addContentView使ImageView居中

时间:2015-07-07 18:00:48

标签: android

我正在尝试通过代码在其中创建一个LinearLayout和一个ImageView。我想特别使用addContentView,因为android代码用于Unity3D插件,并且使用setContentView重叠游戏但setContentView确实有效。但是,使用addContentView将图像放在中心位置,但它位于屏幕的最顶部。我想在屏幕中心。

   LinearLayout layout = new LinearLayout(getApplicationContext());

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

    layout.setGravity(Gravity.CENTER);
    //layoutParams.gravity = Gravity.CENTER;
    layout.setOrientation(LinearLayout.VERTICAL);
    //layout.setLayoutParams(layoutParams);

    LinearLayout.LayoutParams imageViewParams = new LinearLayout.LayoutParams((100),( 100));
    imageViewParams.gravity = Gravity.CENTER;

    ImageView iv = new ImageView(getApplicationContext());
    iv.setLayoutParams(imageViewParams);
    iv.setScaleType(ImageView.ScaleType.FIT_XY);

    iv.setImageResource(drawable_spinner);

    layout.addView(iv);

    addContentView(layout, layoutParams);

正如您所看到的,我已经尝试将重力设置为layoutParams并将其设置为布局,但没有任何变化。

有人可以告诉我我错过了什么。非常感谢!

4 个答案:

答案 0 :(得分:0)

检查活动中已存在的布局的严重性。听起来像是设置在左上角而不是中心。此外,如果图像视图是动态布局中唯一的内容,您可能需要考虑不使用布局并仅添加图像视图。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point(); display.getSize(size);
Integer screenWidth=size.x; 
Integer screenHeight=size.y;

这是我测量屏幕的方式。您的imageView应该是每台设备100x100。所以你应该能够这样设置......

imageView.setLeft((screenWidth/2)-50);
imageView.setTop((screenHeight/2)-50);

答案 1 :(得分:0)

请将您的代码更改为:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setOrientation(LinearLayout.VERTICAL);
layout.setGravity(Gravity.CENTER);

LinearLayout.LayoutParams imageViewParams = new LinearLayout.LayoutParams((100), (100));

ImageView iv = new ImageView(getApplicationContext());
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setImageResource(drawable_spinner);
layout.addView(iv, imageViewParams);

addContentView(layout, layoutParams);

答案 2 :(得分:0)

您可以尝试: <{1}}随处可见,MATCH_PARENT用于imageview。

但只要我们对周围的观点一无所知,我们就无法给你一个明确的解决方案。

答案 3 :(得分:0)

这对我有用

    RelativeLayout rootLayout = new RelativeLayout(this);
    rootLayout.setLayoutParams( new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(size, size);
    params.addRule(RelativeLayout.CENTER_IN_PARENT);
    ivOne = new ImageView(this);
    ivOne.setImageResource(drawable_spinner);
    ivOne.setScaleType(ImageView.ScaleType.FIT_XY);
    ivOne.setLayoutParams(params);
    rootLayout.addView(ivOne);
    addContentView(rootLayout,new ViewGroup.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT));

如果使用ScaleType.FIT_XY之外的其他内容,它实际上会裁剪图像。