Android:align_left与中心对齐

我有一个包含谷歌地图的片段:

 

地图占据整个屏幕并启用了mylocation:

  map.setMyLocationEnabled(true); 

以下代码应将 mylocation按钮与屏幕的左上角对齐:

  // Get the mylocation button view View locationButton = ((View) mapview.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP); rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 

但是 – 这只会将按钮与屏幕的顶部中心对齐。 但是,如果我添加这个:

 if (Build.VERSION.SDK_INT >= 17) { rlp.addRule(RelativeLayout.ALIGN_PARENT_START); } 

然后它正确地对齐左边。 问题是在api 17之前不能以编程方式使用ALIGN_PARENT_START,我需要从较低的api级别支持。 为什么align_parent_left不能独立工作以将按钮对齐到左边?

这是我移动我的位置按钮的实现:

     . . . 

关于我的活动:

 mapFragment = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.myMap)); //if you're using a fragment use: //mapFragment = ((SupportMapFragment) getChildFragmentManager() .findFragmentById(R.id.myMap)); mapFragment.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { //add map adjustments here// //then this is where you move the my location button View locationButton = ((View) mapFragment.getView().findViewById(Integer.parseInt("1")). getParent()).findViewById(Integer.parseInt("2")); // and next place it, for exemple, on bottom right (as Google Maps app) RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); // position on right bottom rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); rlp.setMargins(0, 0, 30, 30); } }); 

不幸的是,一种方法是从头开始创建它

  RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams((int)(45*density),(int)(45*density)); rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); rlp.setMargins((int)(5*density), 0, 0, (int)(5*density)); locationButton.setLayoutParams(rlp); 

例如,密度在哪里

  DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); dispWidth = metrics.widthPixels; dispHeight = metrics.heightPixels; density = metrics.scaledDensity;