玩轉Android之裝置方向

2021-07-13 12:58:38 字數 2995 閱讀 8183

今天我們來聊一下裝置的方向問題。我們主要說的裝置方向主要是橫向(landscape)和豎直(portrait)。裝置的方向會影響到很多東西,最主要的就是裝置的布局。所以,某些時候你可以能不希望裝置方向變了以後布局的方向也跟著改變。

首先建立乙個叫做orientationactivity的activity,作為我們的示例。

有兩個方法可以監測到當前裝置方向的改變。

在androidmanifest.xml檔案裡給orientationactivity新增乙個配置:

android:name=".d11.orientationactivity"

android:configchanges="orientation|screensize|keyboard">

activity>

android:configchanges - 這個配置是告訴android系統,我們要自己處理螢幕方向改變,螢幕尺寸改變和鍵盤的隱藏、顯示。

orientationactivity類**中新增方法:

@override

public

void

onconfigurationchanged(configuration newconfig) else

if (newconfig.orientation == configuration.orientation_landscape)

}

在上面說到的三個配置發生變化的時候,這個方法就會被呼叫。執行起來**,然後旋轉螢幕(如果是真機測試的話,記得把螢幕設定為可旋轉)。在logcat裡就會列印出旋轉的資訊:

i/orientationactivity: onconfigurationchanged 

i/orientationactivity: landscape

i/orientationactivity: onconfigurationchanged

i/orientationactivity: portrait

裡面的一長串內容裡兩個單詞非常的明顯表明了方向。第一行的land,第二行的port,是兩個單詞的縮寫意思是橫屏和豎屏。

所謂的就是讓螢幕在旋轉的時候不要改變方向。只要在androidmanifest.xml檔案裡給* orientationactivity*節點新增android:screenorientation="portrait"屬性就可以。這樣,手機怎麼旋轉,這個activity始終保持豎直的方向。

android:name=".d11.orientationactivity"

android:configchanges="orientation|screensize|keyboard"

android:screenorientation="portrait">

activity>

前面說的兩個,乙個是告訴系統我們要手動處理,其實什麼都沒有處理。只是捕捉到了當前的手機螢幕方向。第二個,是讓activity的方向不受手機方向的影響。

在res裡新建乙個目錄叫做layout-land。這就有兩個layout目錄了,除了layout還有乙個layout-land。-land字尾表明這個目錄下的布局檔案都是水平方向使用的。沒有這個字尾的就是存放的就是處理豎直方向的布局檔案。

在layout-land裡新增乙個布局檔案,名字和layout裡的一樣:activity_orientation.xml。

為了在布局裡區分activity的方向,我們給兩個布局檔案新增不同的textview

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

xmlns:tools=""

android:id="@+id/activity_orientation"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.a31day.d11.orientationactivity">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="portrait"

android:textsize="30sp" />

relativelayout>

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

xmlns:tools=""

android:id="@+id/activity_orientation"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.a31day.d11.orientationactivity">

android:textsize="30sp"

android:text="landscape"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

relativelayout>

最後,記得在androidmanifest.xml檔案裡把orientationactivity恢復到開始狀態。否則,我們上面的修改是不起作用的。

android:name=".d11.orientationactivity">

activity>

這樣就都搞定了。執行起來就可以看到效果了。

Windows Phone 開發之 裝置方向

預設專案是 只支援縱向的 如果你看一下mainpage.xaml檔案的頭部資訊,會發現兩個屬性 supportedorientations portrait orientation portrait 可以將supportedorientations想象成你準備在程式中支援的可能發生的情況的列表。你可...

Linux裝置驅動之《玩轉GPIO》

在linux裝置驅動之 點亮一盞led 中,編寫了ioctl c.h這樣的標頭檔案,在本文中將繼續使用這一頭檔案,如下 然後則是驅動模組程式,如下所示 這裡只說明與前面模組程式的區別,首先是ioctl test函式 static int ioctl test struct inode inode,s...

Android方向研究

目前android的發展正處於高速的時期,也是暴利的時期,混亂的時期,搶占地盤的時期。蘋果的iphone和ipad的成功,給了我們無限的幻想,而恰恰google的android給所有崇拜蘋果但有覺得遙不可及的人們看到了希望。全球的消費電子廠商無不蜂擁而上,一時風起雲湧,硝煙四起,誰站的最高看得最遠,...