1. 程式人生 > >android 控制控制元件的位置和大小

android 控制控制元件的位置和大小

方法一: Android的介面佈局可以用兩種方法,一種是在xml中佈局,一種是和JAVA中Swing一樣在JAVA程式碼中實現Ui介面的佈局,用xml的佈局管理器佈局是很方便的,但是在一些程式碼中需要動態的顯示介面,這個時候xml就缺少了一種靈活性,使用XML和JAVA程式碼中佈局可以解決這樣的問題。在此只對JAVA程式碼中的LoyoutParams方法進行理解及使用。  LoyoutParams類中主要儲存的是佈局引數,元素或元件可以通過這個類實現對佈局引數的設定。在xml中它對應的是元素的”空間位置“、“大小”、“子元素在體內的空間位置”、“在父元素的填充方式”等屬性。在xml隊形的屬性有
(“         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:gravity="center" ”); 通過引用的程式碼說明LayoutParams在佈局中的作用: 1、
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(        
  
 LinearLayout.LayoutParams.FILL_PARENT,         
  
LinearLayout.LayoutParams.WRAP_CONTENT         
  
);         
  
 //呼叫addView()方法增加一個TextView到線性佈局中      
  
 mLayout.addView(textView, p);     

2

FrameLayout framelayout = new FrameLayout(this);  
  
text=new TextView(this);//  
  
Layoutparames params = new LayoutParams(  
  
  
  
ViewGroup.LayoutParams.WRAP_CONTENT  ,  
  
ViewGroup.LayoutParams.WRAP_CONTENT //建立儲存佈局引數的物件  
  
  
);  
  
params.gravity = Gravity.CENTER_HORIZONTAN|Gravity.CENTER_VERTICAL;//設定居中顯示  
  
text.setLayoutParams(params);//設定佈局引數  
  
framelayout.addView(text);//將元素新增到佈局管理器中  

    方法二

      在xml中 改控制元件引數:

以下大部為用在RelativeLayout中的一些引數:

android:layout_above 將該控制元件的底部至於給定ID的控制元件之上,但不會左對齊,預設置於父視窗最左邊,會覆蓋最左邊的控制元件

android:layout_below 將該控制元件的頂部至於給定ID的控制元件之下,但不會左對齊,預設置於父視窗最左邊,會覆蓋最左邊的控制元件

android:layout_toLeftOf 將該控制元件的右邊緣和給定ID的控制元件的左邊緣對齊,預設置於父視窗最上面,會覆蓋最上面的控制元件

android:layout_toRightOf 將該控制元件的左邊緣和給定ID的控制元件的右邊緣對齊,預設置於父視窗最上面,會覆蓋最上面的控制元件

 

  android:alignParentBottom 如果該值為true,則將該控制元件的底部和父控制元件的底部對齊,預設置於父視窗最左下,會覆蓋最左下的控制元件
  android:layout_alignParentLeft 如果該值為true,則將該控制元件的左邊與父控制元件的左邊對齊,預設置於父視窗最左上,會覆蓋最左上的控制元件
  android:layout_alignParentRight 如果該值為true,則將該控制元件的右邊與父控制元件的右邊對齊,預設置於父視窗最右上,會覆蓋最右上的控制元件
  android:layout_alignParentTop 如果該值為true,則將控制元件的頂部與父控制元件的頂部對齊,預設置於父視窗最左上,會覆蓋最左上的控制元件

     android:id  —— 為控制元件指定相應的ID
     android:text —— 指定控制元件當中顯示的文字,需要注意的是,這裡儘量使用strings.xml檔案當中的字串
     android:textSize —— 指定控制元件當中字型的大小
     android:background —— 指定該控制元件所使用的背景色,RGB命名法 
     android:sigleLine —— 如果設定為真的話,則將控制元件的內容在同一行當中進行顯示


android:gravity —— 指定控制元件的基本位置,比如說居中,居右等位置

     android:layout_width="fill_parent" —— 剩餘空間有多大就填充多大,如要再加別的控制元件,則空間沒了,不會顯示出來,每個控制元件都不能少這個
     android:layout_height ="wrap_content"—— 內容多大就多大,如果不停寫內容,會不斷變大,最終導致別的控制元件不能顯示,每個控制元件都不能少這個

    上面2個也可設固定值,如android:layout_width="200px"

     android:width —— 指定控制元件的寬度
     android:height —— 指定控制元件的高度

    當layout_width或layout_height的值為:1、固定值 2、fill_parent  時;width 和 height 的值無論設什麼都不起作用。此時控制元件大小以layout_width和layout_height為準。

    當layout_width或layout_height的值為:1、wrap_content  時;此時控制元件大小以width和height為準。

    android:padding* —— 指定控制元件的內邊距,也就是說控制元件當中的內容,下圖指EditText和主視窗的間距為50px

  android:layout_alignBaseline該控制元件的baseline和給定ID的控制元件的baseline對齊,並置於父視窗最左邊,會覆蓋最左邊的控制元件
  android:layout_alignBottom 將該控制元件的底部邊緣與給定ID控制元件的底部邊緣對齊,並置於父視窗最左邊,會覆蓋最左邊的控制元件
  android:layout_alignLeft 將該控制元件的左邊緣與給定ID控制元件的左邊緣對齊,並置於父視窗最上邊,會覆蓋最上邊的控制元件
  android:layout_alignRight 將該控制元件的右邊緣與給定ID控制元件的右邊緣對齊,並置於父視窗最上邊,會覆蓋最上邊的控制元件
  android:layout_alignTop 將給定控制元件的頂部邊緣與給定ID控制元件的頂部對齊,並置於父視窗最左邊,會覆蓋最左邊的控制元件

  android:layout_centerHorizontal如果值為真,該控制元件將被至於水平方向的中央
  android:layout_centerInParent 如果值為真,該控制元件將被至於父控制元件水平方向和垂直方向的中央
  android:layout_centerVertical 如果值為真,該控制元件將被至於垂直方向的中央

android:layout_weight=""權重,如下,垂直線性佈局中兩個水平線性佈局,權重分別為1、3,每個水平線性佈局裡面的值代表該textview在該水平佈局裡的權重。

但權重所顯示的寬度不一定是固定值,當textview裡的內容大於權重所佔寬度時,還是會變化的。

Android控制字型大小和字型顏色:

style="?android:attr/textAppearanceMedium"
style="?android:attr/textAppearanceSmall"

其它一些引數:

android:excludeFromRecents="true"為true表示長按home鍵將顯示此應用

android:screenOrientation="portrait"  永遠豎屏顯示

android:screenOrientation="portrait"  永遠橫屏顯示

android:configChanges="keyboardHidden|orientation"豎屏切換橫屏時應用也能彈出介面

分隔符

橫向:

<View
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider" />

CheckBox
style="?android:attr/starStyle"

//類似標題欄效果的TextView
style="?android:attr/listSeparatorTextViewStyle"

//其它有用的樣式
android:layout_height="?android:attr/listPreferredItemHeight"

android:paddingRight="?android:attr/scrollbarSize"

style="?android:attr/windowTitleBackgroundStyle"

style="?android:attr/windowTitleStyle"

android:layout_height="?android:attr/windowTitleSize"

android:background="?android:attr/windowBackground"

在drawable-mdpi資料夾下定義button_selector.xml

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="
http://schemas.android.com/apk/res/android">
 <!-- 指定按鈕按下時的圖片 -->
 <item android:state_pressed="true"
  android:drawable="@drawable/start_down"
 />
 <!-- 指定按鈕鬆開時的圖片 --> 
 <item android:state_pressed="false"
  android:drawable="@drawable/start"
 />
</selector>

在Layout中的main.xml

<Button
 android:id="@+id/startButton"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@drawable/button_selector" />
 

EditText 和 TextView 引數

android:inputType
指定輸入法的型別,int型別,可以用|選擇多個。取值可以參考:android.text.InputType類。取值包括:text, textUri, phone,number,等。
android:imeOptions
指定輸入法視窗中的回車鍵的功能,可選值為normal, actionNext,actionDone,actionSearch等。部分輸入法對此的支援可能不夠好。

 android:imeOptions="actionNext"
 android:nextFocusDown="@+id/minute"

上兩條加一起才能跳轉到minute。

屬性名稱

描述

android:background

設定背景色/背景圖片。可以通過以下兩種方法設定背景為透明:@android:color/transparent@null。注意TextView預設是透明的,不用寫此屬性,但是Buttom/ImageButton/ImageView想透明的話就得寫這個屬性了。

android:clickable

是否響應點選事件。

android:contentDescription

設定View的備註說明,作為一種輔助功能提供,為一些沒有文字描述的View提供說明,如ImageButton。這裡在介面上不會有效果,自己在程式中控制,可臨時放一點字串資料。

android:drawingCacheQuality

設定繪圖時半透明質量。有以下值可設定:auto(預設,由框架決定)/high(高質量,使用較高的顏色深度,消耗更多的記憶體)/low(低質量,使用較低的顏色深度,但是用更少的記憶體)。

android:duplicateParentState

如果設定此屬性,將直接從父容器中獲取繪圖狀態(游標,按下等)。 見下面程式碼部分,注意根據目前測試情況僅僅是獲取繪圖狀態,而沒有獲取事件,也就是你點一下LinearLayoutButton有被點選的效果,但是不執行點選事件。

android:fadingEdge

設定拉滾動條時 ,邊框漸變的放向。none(邊框顏色不變),horizontal(水平方向顏色變淡),vertical(垂直方向顏色變淡)。參照fadingEdgeLength的效果圖

android:fadingEdgeLength

設定 邊框漸變的長度。

android:fitsSystemWindows

設定佈局調整時是否考慮系統視窗(如狀態列)

android:focusable

設定是否獲得焦點。若有requestFocus()被呼叫時,後者優先處理。注意在表單中想設定某一個如EditText獲取焦點,光設定這個是不行的,需要將這個EditText前面的focusable都設定為false才行。在Touch模式下獲取焦點需要設定focusableInTouchModetrue

android:focusableInTouchMode

設定在Touch模式下View是否能取得焦點。

android:hapticFeedbackEnabled

設定長按時是否接受其他觸控反饋事件。這裡模擬器沒有試出效果,難道是多點觸控?找不到資料可以找找performHapticFeedbackHapticFeedback這個關鍵字的資料看看。

android:id

給當前View設定一個在當前layout.xml中的唯一編號,可以通過呼叫View.findViewById() Activity.findViewById()根據這個編號查詢到對應的View。不同的layout.xml之間定義相同的id不會衝突。格式如@+id/btnName

android:isScrollContainer

設定當前View為滾動容器。這裡沒有測試出效果來,ListView/ GridView/ ScrollView根本就不用設定這個屬性,而EdidText設定android:scrollbars也能出滾動條。

android:keepScreenOn

View在可見的情況下是否保持喚醒狀態。