我创建了一些自定义元素,我想以编程方式将它们放置在右上角(顶部边缘n
像素,右侧边缘m
像素)。 因此,我需要获取屏幕宽度和屏幕高度,然后设置位置:
int px = screenWidth - m;
int py = screenHeight - n;
如何在主活动中获取screenWidth
和screenHeight
?
#1楼
首先获取视图(例如,通过findViewById()
),然后可以在视图本身上使用getWidth() 。
#2楼
如果要以像素为单位显示尺寸,可以使用getSize
:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
如果您不在Activity
,则可以通过WINDOW_SERVICE
获取默认的Display
:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
如果您在一个片段中并且想要完成此操作,请使用Activity.WindowManager(在Xamarin.Android中)或getActivity()。getWindowManager()(在Java中)。
在引入getSize
之前(在API级别13中),可以使用现已弃用的getWidth
和getHeight
方法:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
但是,对于您正在描述的用例,布局中的边距/填充似乎更合适。
另一种方法是: DisplayMetrics
描述有关显示器的一般信息的结构,例如其大小,密度和字体缩放。 要访问DisplayMetrics成员,请像这样初始化一个对象:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
我们可以使用widthPixels
获取以下信息:
“显示的绝对宽度,以像素为单位。”
例:
Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
#3楼
查找屏幕的宽度和高度:
width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();
使用此工具,我们可以获得最新的SDK 13及更高版本。
// New width and height
int version = android.os.Build.VERSION.SDK_INT;
Log.i("", " name == "+ version);
Display display = getWindowManager().getDefaultDisplay();
int width;
if (version >= 13) {
Point size = new Point();
display.getSize(size);
width = size.x;
Log.i("width", "if =>" +width);
}
else {
width = display.getWidth();
Log.i("width", "else =>" +width);
}
#4楼
public class AndroidScreenActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
String str_ScreenSize = "The Android Screen is: "
+ dm.widthPixels
+ " x "
+ dm.heightPixels;
TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
mScreenSize.setText(str_ScreenSize);
}
}
#5楼
(2012年的答案,可能已过时)如果要支持Honeycomb之前的版本,则需要在API 13之前实现向后兼容性。类似:
int measuredWidth = 0;
int measuredHeight = 0;
WindowManager w = getWindowManager();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
Point size = new Point();
w.getDefaultDisplay().getSize(size);
measuredWidth = size.x;
measuredHeight = size.y;
} else {
Display d = w.getDefaultDisplay();
measuredWidth = d.getWidth();
measuredHeight = d.getHeight();
}
当然,不推荐使用的方法最终还是会从最新的SDK中删除,但是尽管我们仍然依赖大多数拥有Android 2.1、2.2和2.3的用户,但这是我们剩下的。