我可以缩放RelativeLayout吗?

时间:2016-01-04 15:31:13

标签: android android-layout android-relativelayout

我在ImageButton RelativeLayout文件中创建了XML 但是,当我签署我的应用程序时,它在每台设备上显示不同。如何使其与所有屏幕尺寸匹配?

注意:我尝试使用比例因子和draw方法对其进行缩放,但它不起作用。

这是我的Activity代码:

public class StartActivity extends Activity  {

    private ImageButton Play;
    private ImageButton Rate;
    private ImageButton Board;

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        //set to full screen
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_start);

        Rate = (ImageButton) findViewById(R.id.imageButtonRate);
        Rate.setY(55);
        Rate.setX(40);

        Board = (ImageButton) findViewById(R.id.imageButtonBoard);
        Board.setY(55);
        Board.setX(75);

        Play = (ImageButton) findViewById(R.id.imageButtonPlay);
        Play.setY(60);
        Play.setOnClickListener(imageButtonPlayHandler);
    }

    View.OnClickListener imageButtonPlayHandler = new View.OnClickListener() {
        public void onClick(View view) {
            final Intent mainIntent = new Intent(StartActivity.this, MainActivity.class);
            StartActivity.this.startActivity(mainIntent);
            StartActivity.this.finish();
        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_start, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

1 个答案:

答案 0 :(得分:0)

您遇到的问题是屏幕尺寸不同具有不同的像素密度。换句话说,您可以拥有2部具有相同物理尺寸屏幕的手机,但其中一部分的像素数比另一部分多(因此像素密度更高)。

由于这样的代码,您不清楚这一点:

Rate.setY(55);

在这种情况下" 55"是像素数,在不同的屏幕上看起来不同。在一部手机上,与具有两倍像素密度的相同尺寸的屏幕相比,它看起来将是一半大小。那是因为它有固定数量的像素。

您需要使用DisplayMetrics和/或不同drawable文件夹之类的内容来制作尺寸合适的图片。如果不动态计算屏幕尺寸并相应调整图像,则需要多个图像。

Android是这样做的,因为它不应该假设图像应该简单地扩展"或者"按比例缩小"在所有屏幕上。如果它做出了这个假设,那么在很多情况下你必须做相反的事情 - 告诉Android 自动缩放,因为它看起来很奇怪或者具有不可接受的性能或图像质量。