Android 使用addContentView将ImageView居中

Android 使用addContentView将ImageView居中,android,Android,我正试图通过代码在其中创建一个LinearLayout和一个ImageView。我特别想使用addContentView,因为android代码用于Unity3D插件,使用setContentView与游戏重叠,但setContentView确实有效。但是,使用addContentView会将图像放在中间,但它位于屏幕的最顶端。我想把它放在屏幕中心 LinearLayout layout = new LinearLayout(getApplicationContext()); L

我正试图通过代码在其中创建一个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,并将其设置为layout,但没有任何改变


谁能告诉我我错过了什么。非常感谢

检查活动中已经存在的布局的重要性。听起来像是设置在左上角而不是中间。此外,如果图像视图是动态布局中唯一的东西,那么您可能需要考虑不使用布局并只添加图像视图。
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);

请将代码更改为以下内容:

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);
您可以尝试:
MATCH_PARENT
在任何可能的地方都匹配,并且为imageview匹配
weight=1

但只要我们对周围的景色一无所知,我们就不能给你一个明确的解决方案

这对我有用

    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以外的内容,它实际上会裁剪图像

我没有访问默认布局的权限。如果我有,事情会容易得多。因此,如果我只想添加imageView,我是否将addContentView的第一个参数作为imageView?如何测量屏幕并手动设置图像中心的x-y坐标?我也试过了。但由于某种原因,它偏离了中心的一小部分。我试着用addContentView只添加imageView,它被放在左上角。(screenWidth/2-imageWidth/2,screenHeight/2-imageHeight/2)这个坐标应该把你的图像放在中间。但是imageWidth在所有设备上都不一样,对吗?安卓不会根据屏幕分辨率和像素密度来改变它吗?您能告诉我如何计算图像宽度和图像高度吗?为了将它放在中间,我只使用了window manager的getWidth和getHeight并除以2,我甚至尝试为layoutParams匹配父对象。这没什么区别。@Aadithya你什么意思?我用上面的代码测试了它,它在屏幕上完全居中。您正在将线性布局添加到现有布局中。可能父布局有一些宽度/高度限制。如果将最后一行更改为
setContentView(布局、布局参数)你会看到它是居中的。setContentView不是我想要做的,因为这是在游戏的顶部。因此setContentView会屏蔽游戏,图像周围的所有内容都将是黑色的。setContentView确实有效,但我必须使用addContentView。如果有其他方法,我会非常高兴。如果您有一些不允许线性布局扩展到屏幕大小或无法居中的父布局,您可以使用
AlertDialog
。但这将是另一个问题。我最初是在另一个扩展了Dialog的类中完成这一切的。即使那样,我也无法将它居中。出于某种原因,它略低于中心,我必须设置一个边距来向上推它,但我需要向上推它的量因设备而异,因此我放弃了。我不知道默认布局是如何设置的。