Android 几种常用关于屏幕操作的方法(获取屏幕大小,全屏,显示方向)

Android开发几种常用关于屏幕操作!

1.获取屏幕的width和height:


常用的获取屏幕长和宽的方法有如下3种:

<pre name="code" class="java">
 
 
private String getWindowDisplayMetrix() {
    DisplayMetrics wdm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(wdm);
    width=wdm.widthPixels;
    height=wdm.heightPixels;

    return "width" + "=" + width + "..." + "height" +"="+ height;
}

private String getWindowDisplayMetrix2() {

    DisplayMetrics wdm = getResources().getDisplayMetrics();
    width= wdm.widthPixels;
    height=wdm.heightPixels;

    return "width" + "=" + width + "..." + "height" + "=" + height;
}

private String getWindowDisplayMetrix3() {
    WindowManager manager = (WindowManager) MainActivity.this.getSystemService(Context.WINDOW_SERVICE);
    Display display = manager.getDefaultDisplay();
   width=display.getWidth();
    height=display.getHeight();

    return "width" + "=" + width + "..." + "height" +height;

}

让他们分别显示在TextView中:
tv1.setText(getWindowDisplayMetrix());
tv2.setText(getWindowDisplayMetrix2());
tv3.setText(getWindowDisplayMetrix3());

结果如下,所以上面3中方法获取的结果是一样的。




2.设置手机全屏

2.1最常用的设置全屏方法如下:


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //设置取消标题栏
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    //设置取消状态栏
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity_main);

}
使用上述方法注意如下点:

1.requestWindowFeature()方法一定要在setContentView()前面,否则会报错。


2.2 AndroidManifest中配置:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

利用Android提供的内置的Theme就可以了。

2.3在styles中配置自己的Theme:

在valus文件夹下的styles.xml中配置如下:

<resources>
    <style name="MyTheme_NoTitle_FullScreen">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>
</resources>

在AndroidManifest中引用自定义的Theme:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/MyTheme_NoTitle_FullScreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

3.设置屏幕显示方向:

3.1Java代码中配置:

    setContentView(R.layout.activity_main);

    //设置竖屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    //设置横屏
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}


3.2AndroidManifest中配置:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:theme="@style/MyTheme_NoTitle_FullScreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>


注:
当Java代码和AndroidManifest中同时配置了,显示只会按Java代码中配置的来。


题外话:

当不定义横竖屏情况下,这个app会随着手机的转向设置变化而变化,而我们对于横竖屏切换肯定要做相应的事情,可以向如下方法做:
if(getResources().getConfiguration().orientation==ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
   //处理横屏下要做的事
}else{
 //处理竖屏下要做的事情
}



Ps: 虽然接触Android有一段时间了,但是这是第一次写博客,如有不正确的地方,欢迎指出微笑!主要是为自己的学习做下记录,如果能对你有点帮助,我也很高兴。
希望能点个赞!这会给我莫大的鼓励哦大笑



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是获取多个屏幕宽高的几种方法: 1. 使用 System.Windows.Forms.Screen 类 可以使用 System.Windows.Forms.Screen 类来获取所有显示器的屏幕大小和位置信息。这个类的 AllScreens 属性返回一个 Screen 数组,其中包含每个显示器的信息。可以使用 WorkingArea 属性获取每个显示器的工作区大小使用 Bounds 属性获取每个显示器的全屏大小。 示例代码: ```csharp Screen[] screens = Screen.AllScreens; foreach (Screen screen in screens) { Console.WriteLine("Device Name: " + screen.DeviceName); Console.WriteLine("Working Area: " + screen.WorkingArea.ToString()); Console.WriteLine("Bounds: " + screen.Bounds.ToString()); } ``` 2. 使用 WMI (Windows Management Instrumentation) 可以使用 WMI (Windows Management Instrumentation) 查询来获取所有显示器的屏幕大小和位置信息。可以使用 Win32_DesktopMonitor 类和 Win32_VideoController 类来获取这些信息。 示例代码: ```csharp ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor"); foreach (ManagementObject monitor in searcher.Get()) { Console.WriteLine("Screen Width: " + monitor["ScreenWidth"].ToString()); Console.WriteLine("Screen Height: " + monitor["ScreenHeight"].ToString()); } searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController"); foreach (ManagementObject videoController in searcher.Get()) { Console.WriteLine("Video Width: " + videoController["CurrentHorizontalResolution"].ToString()); Console.WriteLine("Video Height: " + videoController["CurrentVerticalResolution"].ToString()); } ``` 3. 使用 WinAPI 可以使用 WinAPI 来获取所有显示器的屏幕大小和位置信息。可以使用 EnumDisplayMonitors 和 GetMonitorInfo 函数来获取这些信息。 示例代码: ```csharp delegate bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData); [DllImport("user32.dll")] static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, IntPtr dwData); [DllImport("user32.dll")] static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct MONITORINFO { public int cbSize; public RECT rcMonitor; public RECT rcWork; public uint dwFlags; } static bool MonitorEnum(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData) { MONITORINFO mi = new MONITORINFO(); mi.cbSize = Marshal.SizeOf(mi); if (GetMonitorInfo(hMonitor, ref mi)) { Console.WriteLine("Device Name: " + mi.szDevice); Console.WriteLine("Monitor Area: " + mi.rcMonitor.ToString()); Console.WriteLine("Work Area: " + mi.rcWork.ToString()); } return true; } EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorEnum, IntPtr.Zero); ``` 这些方法都可以用来获取多个屏幕的宽高。其中,第一种方法是最简单的,第二种方法可以获取更多信息,第三种方法可以使用更底层的 WinAPI。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值