當前位置:首頁 » 安卓系統 » android相對布局居中

android相對布局居中

發布時間: 2025-10-18 04:38:04

『壹』 Android中怎麼用純代碼編寫布局

一、用RelativeLayout進行純代碼布局的理論基礎
1、RelativeLayout,顧名思義,就是以「相對」位置/對齊 為基礎的布局方式。
2、android.widget.RelativeLayout 有個繼承自android.view.ViewGroup.LayoutParams 的內嵌類 LayoutParams,使用這個類的實例
調用RelativeLayout.addView 就可以實現「相對布局」。 android.widget.RelativeLayout.LayoutParams 有一個構造函數:
RelativeLayout.LayoutParams(int w, int h),參數指定了子 View 的寬度和高度,這一點和其父類是一樣的。而實現相對布局的關
鍵在它的 兩個 addRule 方法上。anchor 參數指定可以是View 的 id(「相對於誰」)、RelativeLayout.TRUE(啟用某種對齊方式) 或者
是-1(應用於某些不需要 anchor 的 verb);AddRule 方法的 verb 參數指定相對的「動作」(以下常量均定義於
android.widget.RelativeLayout中,為了簡便不給出其全名):
3、ALIGN_BOTTOM、ALIGN_LEFT、 ALIGN_RIGHT、 ALIGN_TOP: 本 View 的 底邊/左邊/右邊/頂邊 和 anchor 指定的 View 的
底邊/左邊/右邊/頂邊 對齊。
ALIGN_WITH_PARENT_BOTTOM 、ALIGN_WITH_PARENT_LEFT 、 ALIGN_WITH_PARENT_RIGHT 、
ALIGN_WITH_PARENT_TOP : 和上面一組常量類似,只不過不需要再指定 anchor, 其 anchor 自動為 Parent View。
CENTER_HORIZONTAL、CENTER_IN_PARENT 、CENTER_VERTICAL : 如果 anchor 為 TRUE,在 Parent 中 水平居中/水平
和垂直均居中/垂直居中。
POSITION_ABOVE 、POSITION_BELOW 、 POSITION_TO_LEFT 、POSITION_TO_RIGHT : 本 View 位於 anchor 指定的 View
的上邊/下邊/左邊/右邊。

『貳』 Android-ConstraintLayout約束布局使用

這里分別以:app:layout_constraintLeft_toLeftOf和app:layout_constraintRight_toLeftOf舉例:
定義兩個控制項:

這里的id為where的TextView就使用了app:layout_constraintLeft_toLeftOf相對於另一個TextView,這個時候id為where的TextView的顯示的位置,其實是左邊貼在了id為right_top的TextView的左邊上。如下圖:

這個時候如果將id為where的相對於id為right_top的修改成app:layout_constraintRight_toLeftOf,如下所示:

那麼此時顯示的樣式,就是id為where的TextView相對於id為right_top的TextView的右邊顯示。如下圖:

這個屬性,是讓A和B兩個控制項的基準線在同一個水平位置上,比如兩個TextView,大小不同,字體的大小也不同,那麼想要讓這樣兩個不同大小不同字體大小的文本內容顯示在同一個基線,則可以使用該屬性。app:layout_constraintBaseline_toBaselineOf

在約束布局中,margin控制需要存在約束關系的才會生效,比如控制項A某條邊相對於控制項B的某條邊存在約束關系,則控制項A與B之間的margin才會生效。

這里使用了兩種margin屬性,一種就是app:layout_goneMarginEnd,這個只在right_top被gone的時候生效;一種就是android:layout_marginEnd,任何時候都生效。
但是這里的margin需要生效,只有id為where的TextView被id為right_top的TextView所約束,那麼id為where的TextView的margin相對於id為right_top的TextView的才生效。而id為right_top的TextView並沒有被id為where的TextView約束,所以id為right_top的TextView的margin_start其實看不到生效。這里其實可以認為right_top的margin_start生效了,只不過是相對於parent的左邊,但是因為right_top在parent的右上角,所以看不到這個margin效果

這兩個屬性單獨使用並不能生效,水平方向的必須要給控制項的左右兩邊都添加約束才會生效,垂直方向的必須要給控制項的上下兩邊都添加約束才可以生效。

比如這個例子,Button的左邊被TextView的右邊約束,Button的右邊被parent約束,這樣Button的左右兩邊都有約束,那麼給Button添加水平方向的bias屬性就可以生效,即根據Button的左邊約束偏移一定的比例,這里就是相對於TextView的右邊位置偏移40%。
bias的偏移,是根據控制項的水平或者垂直方向的剩餘位置的百分比來偏移。

如果是在ConstraintLayout中居中,則:

如果是在兩個控制項的中間,則可以:

設置寬高百分比,首先設置app:layout_constraintHeight_default="percent"採用百分比形式,其次使用app:layout_constraintHeight_percent="0.3"設置一個0-1的百分比值,最後控制項的寬高需要設置為 0dp ,只有寬高是設置為 0dp 的,百分比才生效。

在約束布局中,給控制項的左右兩邊或者上下兩邊添加約束之後,給控制項的寬高設置為0dp的時候,可以占滿兩個約束控制項中間所有剩餘空間。

比如這個布局,我們需要EditText在TextView的右邊,如果不給EditText設置0dp的寬度,而是設置了match_parent的話,則會占滿屏幕寬度,沒辦法實現EditText在TextView的右邊

在ConstraintLayout中給控制項設置min的寬度和高度,必須是要控制項的layout_width或者layout_height為wrap_content或者0dp時。給控制項設置max的寬度或者高度的時候,必須是要控制項的layout_width或者layout_height為0dp時。
不過在設置max的時候需要注意一點,如果單純只是設置了0dp,如果沒給控制項添加對應的左右約束或者上下約束,比如沒有設置左右約束,那麼layout_constraintWidth_max設置的再大也不會超過整個控制項的wrap_content的長度。

這里的綠色區域的控制項,寬度顯示的明顯沒有達到550dp,但是也不會繼續變長了。
如果是設置了左右約束,那麼最大寬度的限制也就是左右兩個約束中間的剩餘空間寬度

同時給Guide設置layout_constraintGuide_percent和layout_constraintGuide_begin的時候,layout_constraintGuide_begin並不會生效。
layout_constraintGuide_begin是給Guide設置相對於開始位置的偏移,layout_constraintGuide_end是給Guide設置相對於結束位置的偏移。
layout_constraintGuide_percent是設置Guide設置相對於起始位置的偏移百分比。
Guide的作用就是為了給控制項的提供一個約束參考線,控制項可以依靠這個線條約束。

app:constraint_referenced_ids這里是添加約束的控制項的id,app:barrierDirection是添加約束的位置,可以有end、start、left、right、top、bottom
添加不同的值,就可以讓Barrier線條在約束的控制項的對應位置上,比如end,就是讓Barrier線條在username1和password1這兩個控制項的右邊結束位置

這兩個都是線條,都是輔助約束的,但是這兩個有一點區別,就是當控制項比如出現切換手機語言,而造成控制項上的文本顯示長度出現變化的時候,Guideline並不會隨著控制項的長度變化而變化,這樣就會造成約束不靈活,而Barrier可以根據控制項的寬高變化,靈活移動位置。
所以控制項寬高是隨著內容動態變化的,建議使用Barrier,如果控制項的內容是不變的,可以使用Guideline。

『叄』 Android 界面排版

Android布局是應用界面開發的重要一環,在Android中,共有五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局).
一、FrameLayout
這個布局可以看成是牆腳堆東西,有一個四方的矩形的左上角牆腳,我們放了第一個東西,要再放一個,那就在放在原來放的位置的上面,這樣依次的放,會蓋住原來的東西。這個布局比較簡單,也只能放一點比較簡單的東西。

二、LinearLayout

線性布局,這個東西,從外框上可以理解為一個div,他首先是一個一個從上往下羅列在屏幕上。每一個LinearLayout裡面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。
linearLayout中有一個重要的屬性 android:layout_weight="1",這個weight在垂直布局時,代錶行距;水平的時候代表列寬;weight值越大就越大。

三、AbsoluteLayout

絕對布局猶如div指定了absolute屬性,用X,Y坐標來指定元素的位置android:layout_x="20px" android:layout_y="12px" 這種布局方式也比較簡單,但是在垂直隨便切換時,往往會出問題,而且多個元素的時候,計算比較麻煩。 AbsoluteLayout 可以讓子元素指定準確的x/y坐標值,並顯示在屏幕上。AbsoluteLayout 沒有頁邊框,允許元素之間互相重疊(盡管不推薦)。他是絕對坐標,所以在實際中不提倡使用。
相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:
相對於某一個元素
// 相對於給定ID控制項
android:layout_above 將該控制項的底部置於給定ID的控制項之上;
android:layout_below 將該控制項的底部置於給定ID的控制項之下;
android:layout_toLeftOf 將該控制項的右邊緣與給定ID的控制項左邊緣對齊;
android:layout_toRightOf 將該控制項的左邊緣與給定ID的控制項右邊緣對齊;

android:layout_alignBaseline 將該控制項的baseline與給定ID的baseline對齊;
android:layout_alignTop 將該控制項的頂部邊緣與給定ID的頂部邊緣對齊;
android:layout_alignBottom 將該控制項的底部邊緣與給定ID的底部邊緣對齊;
android:layout_alignLeft 將該控制項的左邊緣與給定ID的左邊緣對齊;
android:layout_alignRight 將該控制項的右邊緣與給定ID的右邊緣對齊;

// 相對於父組件
android:layout_alignParentTop 如果為true,將該控制項的頂部與其父控制項的頂部對齊;
android:layout_alignParentBottom 如果為true,將該控制項的底部與其父控制項的底部對齊;
android:layout_alignParentLeft 如果為true,將該控制項的左部與其父控制項的左部對齊;
android:layout_alignParentRight 如果為true,將該控制項的右部與其父控制項的右部對齊;

// 居中
android:layout_centerHorizontal 如果為true,將該控制項的置於水平居中;
android:layout_centerVertical 如果為true,將該控制項的置於垂直居中;
android:layout_centerInParent 如果為true,將該控制項的置於父控制項的中央;

// 指定移動像素
android:layout_marginTop 上偏移的值;
android:layout_marginBottom 下偏移的值;
android:layout_marginLeft 左偏移的值;
android:layout_marginRight 右偏移的值;

example:
android:layout_below = "@id/***"
android:layout_alignBaseline = "@id/***"
android:layout_alignParentTop = true
android:layout_marginLeft = 「10px」

還可以指定邊距等,具體詳見API

五.TableLayout
表格布局類似Html裡面的Table。每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素,設定他的對齊方式 android:gravity="" 。
每一個布局都有自己適合的方式,另外,這五個布局元素可以相互嵌套應用,做出美觀的界面。TableLayout 將子元素的位置分配到行或列中。一個TableLayout 由許多的TableRow 組成,每個TableRow 都會定義一個 row 。TableLayout 容器不會顯示row 、cloumns 或cell 的邊框線。每個 row 擁有0個或多個的cell ;和html中的table查不多少。在實際中也經常使用。

Android的Margin和Padding跟Html的是一樣的。通俗的理解 Padding 為內邊框,Margin 為外邊框
對應的屬性為
android:layout_marginBottom="25dip"
android:layout_marginLeft="10dip"
android:layout_marginTop="10dip"
android:layout_marginRight="10dip"
android:paddingLeft="1dip"
android:paddingTop="1dip"
android:paddingRight="1dip"
android:paddingBottom="1dip"
如果左右上下都是相同的設置則可以直接設置
android:layout_margin="10dip"
android:padding="5dip"

過去,程序員通常以像素為單位設計計算機用戶界面。例如,定義一個寬度為300像素的表單欄位,列之間的間距為5個像素,圖標大小為16×16像素 等。這樣處理的問題在於,如果在一個每英寸點數(dpi)更高的新顯示器上運行該程序,則用戶界面會顯得很小。在有些情況下,用戶界面可能會小到難以看清 內容。

與解析度無關的度量單位可以解決這一問題。Android支持下列所有單位。

px(像素):屏幕上的點。

in(英寸):長度單位。

mm(毫米):長度單位。

pt(磅):1/72英寸。

dp(與密度無關的像素):一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。

dip:與dp相同,多用於android/ophone示例中。

sp(與刻度無關的像素):與dp類似,但是可以根據用戶的字體大小首選項進行縮放。

為了使用戶界面能夠在現在和將來的顯示器類型上正常顯示,建議大家始終使用sp作為文字大小的單位,將dip作為其他元素的單位。當然,也可以考慮使用矢量圖形,而不是用點陣圖.
dp是與密度無關,sp除了與密度無關外,還與scale無關。
如果屏幕密度為160,這時dp和sp和px是一樣的。1dp=1sp=1px,但如果使用px作單位,如果屏幕大小不變(假設還是3.2寸),而屏幕密度變成了320。
那麼原來TextView的寬度設成160px,在密度為320的3.2寸屏幕里看要比在密度為160的3.2寸屏幕上看短了一半。
但如果設置成160dp或160sp的話。系統會自動將width屬性值設置成320px的。
也就是160 * 320 / 160。其中320 / 160可稱為密度比例因子。也就是說,如果使用dp和sp,系統會根據屏幕密度的變化自動進行轉換

熱點內容
命令與征服植物存儲倉庫 發布:2025-10-18 07:11:55 瀏覽:286
nat網路伺服器搭建 發布:2025-10-18 07:11:40 瀏覽:141
ftp伺服器無法登錄別的電腦 發布:2025-10-18 06:52:28 瀏覽:275
為什麼安卓能去掉起劉海 發布:2025-10-18 06:52:28 瀏覽:180
改之理反編譯後打包 發布:2025-10-18 06:51:44 瀏覽:775
安卓都有什麼顏色 發布:2025-10-18 06:07:38 瀏覽:672
linux雙線 發布:2025-10-18 05:57:39 瀏覽:294
360密碼忘記了怎麼辦 發布:2025-10-18 05:35:25 瀏覽:444
編譯jsp軟體哪個好 發布:2025-10-18 05:16:18 瀏覽:433
三星手機刷自己編譯的系統 發布:2025-10-18 04:53:40 瀏覽:343