Android常见XML属性解析
常見XML屬性解析
| android:id | android:id的設置,通常有三種方式,詳見下文 |
| android:layout_width | 控件寬度 |
| android:layout_height | 控件高度 |
| android:padding | 內邊距 |
| android:margin | 外邊距 |
| android:layout_weight | 權重 |
| android:layout_gravity | 相對重力 |
| android:gravity | 本身位置 |
| android:visbility | 可視性 |
| android:background | 背景 |
| android:onClick | 點擊屬性 |
| android:foucusable | 焦點 |
| android:foucsableInTouchMode | 焦點 |
android:id
android:id的設置,通常有三種方式,分別是以下這三種:
android:id=”@+id/xxx”
android:id=”@android:id/tabhost”
android:id=”@id/xxx”
(1)android:id=”@+id/xxx”
表示在R.java文件里面新增一個id為xxx的控件索引,最常用的一種聲明控件id的方式。
代碼獲取方式:findViewById(R.id.xxx);
(2) android:id=”@android:id/tabhost”
表示引用的是系統已有的ID,在對應的sdk目錄下的ids.xml里面。一般外部不去調用,是組件內部調用的時候使用。
(3)android:id=”@id/xxx”
表示引用一個已經存在的ID,在R.java里面的,比如我們自己建了一個ids.xml,里面聲明了一組id,其中一個是xxx,那么你就可以這樣引用了。
代碼獲取方式同(1)
android:layout_width和android:layout_height
所有控件必須指定:android:layout_width和android:layout_height屬性。這兩個屬性有以下三種形式:
a. 具體的大小,如:100px;
b. wrap_content(包含內容),表示控件應該保持原來大小;
c. fill_parent(填充父元素),表示在處理完所有其他控件之后,當前控件應該填滿包含它的容器的所有空用空間。
android:layout_weight
權重
android:layout_weight屬性:表示為相應控件分配的空間比例。其默認值為0,
如果一個控件設置為1,另一個為2,那么第二個控件占用的空間是第一個的兩倍。
另一種方式是以百分比為單位,使用百分比有下面三個步驟:
a. 將布局中控件的layout_width設置為0;
b. 將控件設置成想要的百分比;
c. 保證所有這些控件的百分比和為100.
weight是線性布局的一個獨特的屬性,我們可以使用這個屬性來按照比例對界面進行分配,完成一些特殊的需求。
但是,我們對于這個屬性的計算應該如何理解呢?
首先看下面的例子,我們在布局中這樣設置我們的界面
我們在布局里面設置為線性布局,橫向排列,然后放置兩個寬度為0dp的按鈕,分別設置weight為1和2,在效果圖中,我們可以看到兩個按鈕按照1:2的寬度比例正常排列了,這也是我們經常使用到的場景,這是時候很好理解,Button1的寬度就是1/(1+2) = 1/3,Button2的寬度則是2/(1+2) = 2/3,我們可以很清楚的明白這種情景下的占比如何計算。
但是假如我們的寬度不是0dp(wrap_content和0dp的效果相同),則是match_parent呢?
下面是設置為match_parent的效果
我們可以看到,在這種情況下,占比和上面正好相反,這是怎么回事呢?說到這里,我們就不得不提一下weight的計算方法了。
android:layout_weight的真實含義是:如果View設置了該屬性并且有效,那么該 View的寬度等于原有寬度(android:layout_width)加上剩余空間的占比。
從這個角度我們來解釋一下上面的現象。在上面的代碼中,我們設置每個Button的寬度都是match_parent,假設屏幕寬度為L,那么每個Button的寬度也應該都為L,剩余寬度就等于L-(L+L)= -L。
Button1的weight=1,剩余寬度占比為1/(1+2)= 1/3,所以最終寬度為L+1/3*(-L)=2/3L,Button2的計算類似,最終寬度為L+2/3(-L)=1/3L。
這是在水平方向上的,那么在垂直方向上也是這樣嗎?
下面是測試代碼和效果
如果是垂直方向,那么我們應該改變的是layout_height的屬性,下面是0dp的顯示效果
下面是match_parent的顯示效果,結論和水平是完全一樣的
雖然說我們演示了match_parent的顯示效果,并說明了原因,但是在真正用的時候,我們都是設置某一個屬性為0dp,然后按照權重計算所占百分比。
android:padding
內邊距
通過android:padding屬性可以為部件的四邊設置內邊距。
屬性: android:padding 、android:paddingLeft(左邊距)、android:paddinRight(右邊距)、android:paddinTop(上邊距)、android:paddinBottom(下邊距),單位是px,如:5px。
android:margin 和android:layout_margin
Margin 為外邊框
padding與margin區別
padding是站在父view的角度描述問題,它規定它里面的內容必須與這個父view邊界的距離。margin則是站在自己的角度描述問題,規定自己和其他(上下左右)的view之間的距離,如果同一級只有一個view,那么它的效果基本上就和padding一樣了。
android:layout_gravity&android:gravity
從名字上可以看到,android:gravity是對元素本身說的,元素本身的文本顯示在什么地方靠著換個屬性設置,不過不設置默認是在左側的。
android:layout_gravity是相對與它的父元素說的,說明元素顯示在父元素的什么位置。
比如說button: android:layout_gravity 表示按鈕在界面上的位置。 android:gravity表示button上的字在button上的位置。
可選值
這兩個屬性可選的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical。
而且這些屬性是可以多選的,用“|”分開。
默認這個的值是:Gravity.LEFT
horizontal 都是操作的水平方向,即橫向, vertical 都是炒作的垂直方向,即縱向。
對于LinearLayout何時生效的問題
參看:
也談layout_gravity和gravity
對于 LinearLayout
當 android:orientation=”vertical” 時, 只有水平方向的設置才起作用,垂直方向的設置不起作用。即:left,right,center_horizontal 是生效的。
當 android:orientation=”horizontal” 時, 只有垂直方向的設置才起作用,水平方向的設置不起作用。即:top,bottom,center_vertical 是生效的。
android:visbility
VISIBLE:設置控件可見
INVISIBLE:設置控件不可見
GONE:設置控件隱藏
而INVISIBLE和GONE的主要區別是:當控件visibility屬性為INVISIBLE時,界面保留了view控件所占有的空間;而控件屬性為GONE時,界面則不保留view控件所占有的空間。
可見(visible)
XML文件:android:visibility=”visible”
Java代碼:view.setVisibility(View.VISIBLE);
不可見(invisible)
XML文件:android:visibility=”invisible”
Java代碼:view.setVisibility(View.INVISIBLE);
隱藏(GONE)
XML文件:android:visibility=”gone”
Java代碼:view.setVisibility(View.GONE);
android:onClick
Represents a push-button widget. Push-buttons can be pressed, or clicked, by the user to perform an action.
A typical use of a push-button in an activity would be the following:
public class MyActivity extends Activity {protected void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.content_layout_id);final Button button = (Button) findViewById(R.id.button_id);button.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// Perform action on click}});}}However, instead of applying an OnClickListener to the button in your activity, you can assign a method to your button in the XML layout, using the android:onClick attribute. For example:
<Button android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="@string/self_destruct"android:onClick="selfDestruct" />Now, when a user clicks the button, the Android system calls the activity’s selfDestruct(View) method. In order for this to work, the method must be public and accept a View as its only parameter. For example:
public void selfDestruct(View view) {// Kabloey}The View passed into the method is a reference to the widget that was clicked.
android:foucusable和android:foucsableInTouchMode
官方touch-mode
當用戶直接使用keys或trackball與UI進行交互的時候, 必須先使目標控件獲取焦點(比如按鈕),這樣用戶才會注意到是什么控件接收輸入. 然而如果設備支持觸摸手勢的話, 用戶可能使用觸摸屏與UI進行交互, 這個時候就沒有必要將目標控件高亮顯示了(即,獲取焦點). 因此就產生了這樣一種交互模式叫”touch mode .”
對于一個擁有觸摸屏功能的設備而言, 一旦用戶用手點擊屏幕, 設備立刻進入touch mode . 這時候被點擊的控件只有isFocusableInTouchMode()方法返回true的時候才會 focusable , 比如EditText控件. 其他可以觸摸的控件, 比如按鈕, 當被點擊的時候不會獲取焦點; 它們只是簡單地執行onClick事件而已.
任何時候只要用戶點擊key或滾動trackball, 設備就會退出touch mode ,并且找一個view將焦點置于其上. 此時用戶可以不使用觸摸手勢了.
touch mode 在整個系統運行期間都是有效的(在任何activities中). 如果想要查詢當前處于何種狀態, 你可以調用View#isInTouchMode()來看看當前是否處于touch mode .
獲取焦點,我們只需要設置
android:foucusableInTouchMode=“true”就可以了。
所有的獲取焦點,都要有一個前提,那就是該控件必須設置android:clickable=”true”,如果都點擊不了,設置焦點應該沒什么意義了吧。
android:background
1.指定顏色
android:background="@color/mycolor"These colors can be defined in the res/values/colors.xml file (see here how to do this).
You can also define a color directly at the attribute (android:background=”#ffff0000”), but that’s usually not good. By defining the colors in the XML file you can give it a descriptive name (improves code readability) and you can reuse it somewhere else.
2.指定圖片
android:background="@drawable/backgroud" 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Android常见XML属性解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle查询锁表以及杀会话或系统进程
- 下一篇: TextView