将Element放在RelativeLayout背景上的某些点上

时间:2016-02-09 08:13:52

标签: android android-layout relativelayout

我有一张图片,我想在不同的屏幕尺寸的不同设备上的某个点(在棕色矩形上)放置TextView。我的图片如下:
注意ImageView的scaleType为 CenterCrop
my background

在下图中我展示了我想要放置TextView的地方:

textview bg

这是我的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>

4 个答案:

答案 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);

}