當前位置:首頁 » 安卓系統 » android控制項屬性

android控制項屬性

發布時間: 2023-08-08 18:45:37

『壹』 Android 新控制項之ConstraintLayout(約束布局)

ConstraintLayout (約束布局) 繼承於ViewGroup 允許開發者以靈活的方式定位和調整小部件的大小

ConstraintLayout 可讓開發者使用扁平視圖層次結構(無嵌套視圖組)創建復雜的大型布局。它與 RelativeLayout 相似,其中所有的視圖均根據同級視圖與父布局之間的關系進行布局,但其靈活性要高於 RelativeLayout ,並且更易於與 Android Studio 的布局編輯器配合使用。我理解為ConstraintLayout是一個更加靈活且減少嵌套的 RelativeLayout 的布局

ConstraintLayout作為支持庫提供,開發者可以在從 API 級別 9 (Gingerbread) 開始的 Android 系統上使用。

相信在面對一些復雜的UI頁面,咱們都是使用 RelativeLayout , LinearLayout 層層嵌套實現的.雖然能實現效果.但是層層嵌套層層解析載入View 無疑會耗費載入時間,耗費手機性能.這是時候ConstraintLayout(約束布局),就應運而生了,它出現的目的就是減少嵌套,優化層層嵌套狀況帶來的弊端

要在 ConstraintLayout 中定義某個視圖的位置, 您必須為該視圖添加至少一個水平約束條件和一個垂直約束條件 。每個約束條件均表示與其他視圖、父布局或隱形引導線之間連接或對齊方式。每個約束條件均定義了視圖在豎軸或者橫軸上的位置;因此每個視圖在每個軸上都必須至少有一個約束條件,但通常情況下會需要更多約束條件。

當您將視圖拖放到布局編輯器中時,即使沒有任何約束條件,它也會停留在您放置的位置。不過,這只是為了便於修改;當您在設備上運行布局時,如果視圖沒有任何約束條件,則會在位置 [0,0](左上角)處進行繪制。

在圖 1 中,布局在編輯器中看起來很完美,但視圖 C 上卻沒有垂直約束條件。在設備上繪制此布局時,雖然視圖 C 與視圖 A 的左右邊緣水平對齊,但由於沒有垂直約束條件,它會顯示在屏幕頂部

請注意,約束中不能有循環依賴。

相對定位是在 ConstraintLayout 中創建布局的基本構建塊之一。這些約束允許您相對於另一個小部件定位給定的小部件。您可以在水平和垂直軸上約束一個小部件:

如下圖,這告訴系統我們希望按鈕 B 的左側被約束到按鈕 A 的右側。這樣的位置約束意味著系統將嘗試讓兩側共享相同的位置。

這是可用約束的列表:

app:layout_constraintLeft(自身)_toLeftOf(相對於的控制項)="相對的控制項ID"

1.2 layout_constraintBaseline_toBaselineOf 基線對齊

如果設置了側邊距,它們將應用於相應的約束(如果存在)(圖 ),將邊距強制為目標端和源端之間的空間。通常的布局邊距屬性可用於此效果

2.1屬性:

請注意,邊距只能為正數或等於零,並且取Dimension.

2.2. 約束目標View.GONE的時候 的邊距

3.1 居中定位,就是把定位控制項的左邊對應目標的左邊 右邊對應目標的右邊,上邊對應目標的上邊

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"

如上圖,Button的左邊位於父布局的左邊,右邊位於父布局的右邊就做到了水平居中的效果

3.2 偏移 : 有時候居中展示還需要做出偏移效果

可以以一定角度和距離約束一個小部件中心相對於另一個小部件中心。這允許您將一個小部件定位在一個圓圈上

ConstraintLayout對標記為 的小部件進行了特定處理View.GONE。

GONE像往常一樣,小部件不會被顯示並且不是布局本身的一部分(即,如果標記為 ,它們的實際尺寸不會改變GONE)。
但就布局計算而言,GONE小部件仍然是其中的一部分,但有一個重要區別:

注意:
使用的邊距將是 B 在連接到 A 時定義的邊距(參見圖 7 示例)。在某些情況下,這可能不是您想要的邊距(例如,A 到其容器的一側有 100dp 的邊距,B 到 A 的邊距只有 16dp,將 A 標記為已消失,B 到容器的邊距為 16dp)。出於這個原因,您可以指定在連接到被標記為已消失的小部件時使用的備用邊距值(請參閱 上面有關已消失的邊距屬性的部分 )

1.1 您可以為自身定義最小和最大尺寸ConstraintLayout

1.2 控制項尺寸約束
android:layout_width可以通過 3 種不同方式設置和 android:layout_height屬性 來指定控制項的尺寸:

重要提示:
MATCH_PARENT不建議用於ConstraintLayout. 可以通過MATCH_CONSTRAINT將相應的左/右或上/下約束設置為來定義類似的行為"parent"。

WRAP_CONTENT (添加在 1 . 1中):強制約束
如果維度設置為WRAP_CONTENT,則在 1.1 之前的版本中,它們將被視為文字維度——也就是說,約束不會限制結果維度。雖然通常這已經足夠(並且更快),但在某些情況下,您可能希望使用WRAP_CONTENT,但繼續強制執行約束以限制結果維度。在這種情況下,您可以添加相應的屬性之一:

MATCH_CONSTRAINT維度(添加在 1 . 1中)
當維度設置為MATCH_CONSTRAINT時,默認行為是讓結果大小佔用所有可用空間。有幾個額外的修飾符可用:

layout_constraintWidth_min和layout_constraintHeight_min: 將設置此維度的最小尺寸
layout_constraintWidth_max和layout_constraintHeight_max: 將設置此維度的最大尺寸
layout_constraintWidth_percent和layout_constraintHeight_percent: 將此維度的大小設置為父維度的百分比

比率: 寬高比
您還可以將小部件的一個維度定義為另一個維度的比率。為此,您需要將至少一個約束維度設置為0dp(即MATCH_CONSTRAINT),並將屬性設置layout_constraintDimensionRatio為給定的比率。例如:

除此之外,在設置寬高比的值的時候,還可以在前面加W或H,分別指定寬度或高度限制。 例如:
app:layout_constraintDimensionRatio="H,2:3"指的是 高:寬=2:3
app:layout_constraintDimensionRatio="W,2:3"指的是 寬:高=2:3

...

Guildline的主要屬性:

Constraint 約束布局為了解決嵌套布局的弊端,更快的載入頁面而出現,但是約束布局需要整體架構頁面要有明確的構建頁面的思維,故而學習以及思維模式要有的.所以個人感覺是簡單頁面還是用相對布局,線性布局就夠了,對於復雜布局約束布局是你優化頁面載入的不二之選.
*寫作不容易,且贊且珍惜!!!*

『貳』 android 自定義控制項 屬性怎麼用

自定義屬性設置
public class lei extends RelativeLayout {

private TextView tv1
public lei(Context context) {
super(context);
}
public lei(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.item,this);
tv1 = findViewById(R.id.tv1);
TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.lei);
String str1 = (String) array.getText(R.styleable.lei_settitle);
int str2 = array.getColor(R.styleable.lei_setbackgroudcolor,Color.BLACK);
tv1.setText(str1);
tv1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(), "toast", Toast.LENGTH_SHORT).show();
}
});
array.recycle();
}
}
布局控制項
<com.example.administrator.myapplication.lei
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
cs:setbackgroudcolor="#158616"
cs:settitle="這個是標題"
cs:settitletextcolor="#FFFFFF"
cs:settextrcolor="#FFFFFF"
>
</com.example.administrator.myapplication.lei>
屬性設置
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="lei" >
<attr name="setbackgroudcolor" format="color|reference"/>
<attr name="settitle" format="string|reference"/>
<attr name="settextrcolor" format="color"/>
<attr name="settitletextcolor" format="color"/>
</declare-styleable>

</resources>

『叄』 android 怎麼在代碼中獲取控制項的屬性值

如果是自定義的控制項可以用一下代碼TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyToggleBtn);// 由attrs 獲得 TypeArray,
如果是系統自帶的控制項,通常控制項點get會有對應的獲取屬性值的方法,如textView.getHeight,不過有些方法如margin,就要通過layoutparam去獲取設置

『肆』 Android自定義控制項之可平移、縮放、旋轉圖片控制項

先上效果圖

源碼

單點拖動圖片對圖片進行平移操作。雙手縮放圖片大小和旋轉圖片到一定的角度。圖片縮放的時候 不能大於最大的縮放因子和小於最小的縮放因子。大於最大縮放因子或者小於最小縮放因子需要對圖像進行回彈。圖片旋轉的角度只能為90度的倍數,不滿足90度要進行回彈。圖片回彈要一個漸變的效果。

大體思路: 首先,Android中提供了Matrix類可以對圖像進行處理。其次,要顯示一張圖片最容易想到的就是ImageView。回彈要求漸變的過程,可以通過屬性動畫進行設置。所以大體的思路是:繼承ImageView,重寫onTouchEvent()方法,判斷事件類型,在對應的事件使用Matrix對圖像進行變換。
Matrix是一個已經封裝好的矩陣,最重要的作用就是對坐標點進行變換。
舉個栗子:
1.某個點(x0,y0,1)通過單位矩陣E映射得到的點還是(x0,y0,1)。

3.點(x0,y0,1)通過矩陣T映射得到的點就會做如下的變換

可以看到點(x0,y0,1)經過T矩陣在x軸方向上平移了dx,在y軸方向上平移了dy。

通過以上的變換可以得到具體的思路: 我們維護一個圖像對應的矩陣mCurrentMatrix,該矩陣主要是對ImageView中的圖像的各個點進行映射。ImageView在容器位置擺放完成之後,置mCurrentMatrix矩陣為單位矩陣。當onTouchEvent()方法中觸發單點觸控並且手指進行平移的時候,調用矩陣mCurrentMatrix的postTranslate(dx,dy),對mCurrentMatrix進行變換。當手指抬起,利用變換結束後的矩陣對圖像的各個點進行映射,從而得到平移變換後的圖像。同理可得,在兩只手指進行縮放旋轉的時候,我們對矩陣mCurrentMatrix進行各種變換,當縮放旋轉的事件結束再利用變換完的矩陣去映射圖像的各個點,從而得到縮放、旋轉後的圖像。

安卓自定義View進階 - Matrix原理
安卓自定義View進階 - Matrix詳解

首先理清事件的邏輯:

初始化圖像大小和位置

縮放圖像大小和控制項大小自適應,平移圖像中心和控制項中心重合

onTouchEvent()函數

平移操作

將圖像對應的矩陣進行變換。

縮放操作

mBoundRectF為記錄圖像邊界的矩形。縮放的時候選取圖像的中心進行縮放。

旋轉操作

旋轉的時候旋轉的旋轉中心也是圖像的中心

圖像中各個點的映射

調用ImageView的setImageMatrix(Matrix matrix)會讓ImageView根據設置的matrix去重新繪制圖像。

更新圖像的矩形邊界

獲得圖像的矩形,並根據矩陣映射矩形各個點的坐標。

縮放回彈

旋轉回彈

一些計算方法

要求圖像的變換是一個漸變的過程,很容易想到的就是屬性動畫。因為屬性動畫本身就是對值進行不斷set的過程。而我們維護的矩陣也是一個值,所以很自然可以想到,如果得到回彈之前的矩陣的值以及回彈之後矩陣的值,就可以根據動畫監聽器中動畫當前的系數值去改變矩陣的值。

對animator對象設置完監聽器之後,就可以在手指抬起的時候調用屬性動畫的start()方法開啟動畫。

自定義可平移、縮放、旋轉的控制項主要點有兩個方面:一是onTouchEvent()中判斷平移、旋轉、縮放的觸發條件,平移位移量、縮放比例因子、旋轉角度的計算。二是Matrix矩陣的應用。

熱點內容
手機wps密碼怎麼取消密碼 發布:2025-02-04 00:51:44 瀏覽:593
演算法邏輯表 發布:2025-02-04 00:51:44 瀏覽:238
零售股票如何配置主線 發布:2025-02-04 00:51:07 瀏覽:945
預演算法施行時間是 發布:2025-02-04 00:50:30 瀏覽:339
世界ol上傳照片 發布:2025-02-04 00:34:13 瀏覽:61
有初始化的數組編譯提示重復定義 發布:2025-02-04 00:33:21 瀏覽:583
家裡電腦wifi密碼怎麼改 發布:2025-02-04 00:27:35 瀏覽:409
手機網頁緩存視頻 發布:2025-02-03 23:38:48 瀏覽:835
agnes演算法 發布:2025-02-03 23:38:05 瀏覽:38
私密上傳在哪 發布:2025-02-03 23:33:04 瀏覽:1005