我有一张图片,我想在不同的屏幕尺寸的不同设备上的某个点(在棕色矩形上)放置TextView
。我的图片如下:
注意:ImageView
的scaleType为 CenterCrop
在下图中我展示了我想要放置TextView的地方:
这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/startpage"<!-- my background-->
android:scaleType="centerCrop"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textColor="#fff"/>
</RelativeLayout>
答案 0 :(得分:0)
有很多选项如何做到这一点,但看到你的照片我只是让我的TextView
对齐到左上角,并将其布局边距设置为{{{ 1}}(我只是在任何图形程序中弄清楚。)
答案 1 :(得分:0)
有几种方法。我很新,所以有更多知识的人最有可能得到更好的答案。但是,您可以尝试与相对布局对齐。或者你可以使用布局重力来改变它,以便它可以吸引#34;走向你想要的地方。
答案 2 :(得分:0)
我建议您从draw 9-patch开始,这是一个工具,可以帮助您选择您希望内容适合图片的位置。
Draw 9-patch工具是一个WYSIWYG编辑器,允许您创建 位图图像,自动调整大小以容纳内容 视图和屏幕大小。
之后你需要检查对齐和这些东西。比如左上角,填充顶部等等
答案 3 :(得分:0)
最后,我自己找到了,看看这些java代码:
我找到显示器的宽度和高度,然后计算比例,根据比例我缩放边距。
@Bind(R.id.name_tv)TextView nameTV;
public final static float bgWidth = 768;
public final static float bgHeight = 1136;
public float tVsRightMargin = 123;
public float nameTVtopMargin = 314;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ResourceManager.setActivity(this);
setContentView(R.layout.main);
ButterKnife.bind(this);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int displayWidth = displayMetrics.widthPixels;
int displayHeight = displayMetrics.heightPixels;
Log.v("MainActivity","displayWidth: "+displayWidth);
Log.v("MainActivity", "displayHeight: " + displayHeight);
float scale = Math.max(displayWidth/bgWidth, displayHeight/bgHeight);
Log.v("MainActivity", "scale: "+scale);
float bgScaledWidth = scale*bgWidth;
float bgScaledHeight = scale*bgHeight;
tVsRightMargin *= scale;
nameTVtopMargin *= scale;
if(bgScaledWidth>displayWidth) {
tVsRightMargin -= ((bgScaledWidth - displayWidth) / 2f);
}
if(bgScaledHeight>displayHeight){
nameTVtopMargin -= ((bgScaledHeight-displayHeight)/2f);
}
nameTV.setText("محمد");
nameTV.setTypeface(ResourceManager.getTypeface());
Log.v("MainActivity", "top margin: " + nameTVtopMargin);
Log.v("MainActivity", "right margin: " + tVsRightMargin);
((RelativeLayout.LayoutParams) nameTV.getLayoutParams()).setMargins(0, (int) nameTVtopMargin, (int) tVsRightMargin, 0);
}