我希望将我的ImageView放置在Android Studio中,以便在Android手机的众多屏幕尺寸中,它可以位于相同的位置(比率)。
这是activity_main.xml
中的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.slippysam.sooper_fly.slippysam.MainActivity"
android:background="@drawable/bgday">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxHeight="40dp"
android:maxWidth="40dp"
android:adjustViewBounds="true"
android:src="@drawable/sam"
android:id="@+id/samm"
/>
</RelativeLayout/>
这是我在Activity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
positionSam();
}
public void positionSam(){
final ImageView sam = (ImageView)findViewById(R.id.samm);
DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
float dpHeight = dm.heightPixels / dm.density;
float dpWidth = dm.widthPixels / dm.density;
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) sam.getLayoutParams();
lp.leftMargin = (int) ((dpWidth * 0.5));
lp.topMargin = (int) ((dpHeight * 1.0555));
sam.setLayoutParams(lp);
}
}
这个功能确实改变了我的ImageView的位置,但是当我在产品之间切换时,它的位置仍然不具体。
答案 0 :(得分:0)
在您的布局(RelativeLayout
)中,您需要指定ImageView
的放置位置。
例如,您可以尝试使用属性android:centerInParent="true"
,因此您的布局文件将如下所示:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.slippysam.sooper_fly.slippysam.MainActivity"
android:background="@drawable/bgday">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxHeight="40dp"
android:maxWidth="40dp"
android:adjustViewBounds="true"
android:centerInParent="true"
android:src="@drawable/sam"
android:id="@+id/samm" />
</RelativeLayout/>
使用centerInParent="true"
,您无需以编程方式居中ImageView
,因为您现在正在执行此操作。
如果您仍想以编程方式执行此操作,则可以向LayoutParams
添加规则,如下所示:
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) sam.getLayoutParams();
lp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
sam.setLayoutParams(lp);
然后忘记设置ImageView
的保证金。
要以编程方式使用它,每次显示新图像时都需要调用positionSam()
方法。
答案 1 :(得分:0)
RelativeLayout
编辑为:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="0px"
android:paddingLeft="0px"
android:paddingRight="0px"
android:paddingTop="0px"
tools:context="com.slippysam.sooper_fly.slippysam.MainActivity"
android:background="@drawable/bgday">
更改paddingBottom
paddingLeft
等有助于在我需要ImageView的地方变得更加准确。我希望这能满足任何需要它的人。