02_Android應用界面編程_01_視圖(View)組件

一、視圖組件與容器組件

Android絕大部分UI組件都放在android.widget和android.view包及其子包,全部的UI組件都繼承了View類,ViewGroup則用於其餘組件的容器。java

XML屬性 android

相關方法 緩存

說明 ide

android:alpha setAlpha(float) 設置該組件的透明度
android:background setBackgroundResource(int) 設置該組件的背景顏色
android:clickable setClickable(boolean) 設置該組件是否能夠激發單擊事件
android:contentDescription setContentDescription(CharSequence) 設置該組件的主要描述信息
android:drawingCacheQuality setDrawingCacheQuality(iint) 設置該組件所使用的繪製緩存的質量
android:fadeScrollbars setScrollbarFadingEnabled(boolean) 當不使用該組件的滾動條時,是否淡出顯示滾動條
android:fadingEdge setVerticalFadingEdgeEnabled(boolean) 設置滾動該組件時組件邊界是否使用淡出效果
android:fadingEdgeLength getVerticalFadingEdgeLength() 設置淡出邊界的長度
android:focusable setFocusable(boolean) 設置組件是否能夠獲得焦點
android:focusableInTouchMode setFocusableInTouchMode(boolean) 設置該組件在觸摸模式下是否能夠獲得焦點
android:id setId(int) 設置該組件的惟一標識。Java代碼中能夠經過findViewById來獲取它
android:isScrollContainer setScrollContainer(boolean) 設置該組件是否做爲可滾動容器使用
android:keepScreenOn setKeepScreenOn(boolean) 設置該組件是否會強制手機屏幕一直打開
android:longClickable setLongClickable(boolean) 設置該組件是否能夠響應長單擊事件
android:minHeight setMinimumHeight(int) 設置該組件的最小高度
android:minWidth setMinimumWidtht(int) 設置該組件的最小寬度
android:nextFocusDown SetNextFocusDownId(int) 設置焦點在該組件上,且按向下鍵時得到焦點的組件ID
android:nextFocusLeft setNextFocusLeftId(int) 設置焦點在該組件上,且按向左鍵時得到焦點的組件ID
android:nextFocusRight setNextFocusRightId(int) 設置焦點在該組件上,且按向右鍵時得到焦點的組件ID
android:nextFocusUp setNextFocusUpId(int) 設置焦點在該組件上,且按向上鍵時得到焦點的組件ID
android:onClick   爲該組件的單擊事件綁定監聽器
android:padding setPadding(int,int,int,int) 在組件的四邊設置填充區域
android:paddingLeft setPadding(int,int,int,int) 在組件的左邊設置填充區域
android:paddingTop setPadding(int,int,int,int) 在組件的上邊設置填充區域
android:paddingRight setPadding(int,int,int,int) 在組件的右邊設置填充區域
android:paddingBottom setPadding(int,int,int,int) 在組件的下邊設置填充區域
android:rotation setRotation(float) 設置該組件旋轉的角度
android:rotationX setRotationX(float) 設置該組件繞X軸旋轉的角度
android:rotationY setRotationY(float) 設置該組件繞Y軸旋轉的角度
android:saveEnabled setSaveEnabled(boolean) 若是設置爲false,那當該組件被凍結時不會保存它的狀態
android:scaleX setScaleX(float) 設置該組件在水平方向的縮放比
android:scaleY setScaleY(float) 設置該組件在垂直方向的縮放比
android:scrollX   該組件初始化後的水平滾動偏移
android:scrollY   該組件初始化後的垂直滾動偏移
android:scrollbarAlwaysDrawHorizontalTrack   設置該組件是否老是顯示水平滾動條的軌跡
android:scrollbarAlwaysDrawVerticalTrack   設置該組件是否老是顯示垂直滾動條的軌跡
android:scrollbarDefaultDelayBeforeFade setScrollbarDefaultDelayBeforeFade(int) 設置滾動條在淡出隱藏以前延遲多少毫秒
android:scrollbarFadeDuration setScrollbarFadeDuration(int) 設置滾動條淡出隱藏過程須要多少秒
android:scrollbarSize setScrollbarSize(int) 設置垂直滾動條的寬度和水平滾動條的高度
android:scrollbarStyle setScrollbarStyle(int) 設置滾動條的風格和位置。該屬性支持以下屬性: insideOverlay insideInset OutsideOverlay OutsideInset
android:scrollbarThumbHorizontal   設置該組件的水平滾動條的滑塊對應的Drawable對象
android:scrollbarThumbVertical   設置該組件的垂直滾動條的滑塊對應的Drawable對象
android:scrollbarTrackHorizontal   設置該組件的水平滾動條的軌道對應的Drawable對象
android:scrollbarTrackVertical   設置該組件的垂直滾動條的軌道對應的Drawable對象
android:scrollbars   定義該組件滾動時顯示幾個滾動條,該屬性支持以下屬性值。 none:不顯示滾動條 horizont:顯示水平滾動條 vertical:顯示垂直滾動條
android:soundEffectsEnabled setSoundEffectsEnabled(boolean) 設置該組件被單擊時是否使用音效

android:tag 佈局

  爲該組件設置一個字符串類型的tag值。接下來可經過ViewgetTag()獲取該字符串,或經過findViewWithTag()查找該組件
android:transformPivotX setPivotX(float) 設置該組件旋轉時旋轉中心的X座標
android:transformPivotY setPivotY(float) 設置該組件旋轉時旋轉中心的Y座標
android:translationX setTranslationX(float) 設置該組件在X方向上位移
android:translationY setTranslationY(float) 設置該組件在Y方向上位移
android: visibility setVisibility(int) 設置該組件是否可見

*Drawable是Android提供的一個抽象類,包含了大量的子類,能夠定製UI組件的背景等外觀。this

ViewGroup爲一個抽象類,實際上經過他的子類來做爲容器,例如各類佈局容器,其經過ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams兩個內部類來控制期子組件的分佈。spa

ViewGroup.LayoutParams兩個屬性code

XML屬性 orm

說明 xml

android:layout_height

指定該子組件的佈局高度
android:layout_width 指定該子組件的佈局寬度


他們都支持下面三個屬性值:fill_parent、match_parent、wrap_content


ViewGroup.MarginLayoutParams支持的屬性

XML屬性

方法

說明

android:layout_marginButton setMargins(int,int,int,int) 指定該子組件下邊的頁邊距
android:layout_marginLeft    
android:layout_marginRight    
android:layout_marginTop    

 

二、使用XML佈局控制UI界面

java代碼在Activity中顯示視圖:

setContentView(R.layout.<資源文件id>);

java代碼中訪問UI組件:

findViewBuId(R.id.<android.id屬性值>);

三、在代碼中控制Ui界面

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.main);
        // 建立一個線性佈局管理器
        LinearLayout layout = new LinearLayout(this);
        // 設置該Activity顯示layout
        super.setContentView(layout);
        layout.setOrientation(LinearLayout.VERTICAL);
        // 建立一個TextView
        final TextView show = new TextView(this);
        // 建立一個按鈕
        Button bn = new Button(this);
        bn.setText("OK");
        bn.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        //向layout容器中添加TextView
        layout.addView(show);
        //向Layout中添加按鈕
        layout.addView(bn);
        //爲按鈕綁定一個事件監聽器
        bn.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO 自動生成的方法存根
                show.setText("單擊成功");
            }
        });
    }

上面的this是一個Context對象,他表明訪問Android應用環境的全局信息的API。他自己是一個抽象類,Activity、Service都繼承了Context。

四、通常結合XMl佈局和代碼混合控制UI界面

這種狀況下,習慣把變化小、行爲比較固定的組件放在XML佈局文件中管理,而那些變化多,行爲控制比較複雜的組件交給java代碼來管理。

五、開發自定義的View

當Android系統提供的Ui組件不足以知足項目需求是,咱們能夠經過繼承View來派生自定義組件。

首先定義一個繼承View基類的子類,而後重寫View類的一個或多個方法。

  • 構造器:View被實例化或者被加載並構建界面時將須要調用構造器
  • onFinishInflate() 當View中全部的子控件均被映射成xml後觸發
  • onMeasure(int, int) 肯定全部子元素的大小
  • onLayout(boolean, int, int, int, int) 當View分配全部的子元素的大小和位置時觸發
  • onSizeChanged(int, int, int, int) 當view的大小發生變化時觸發
  • onDraw(Canvas) view渲染內容的細節
  • onKeyDown(int, KeyEvent) 有按鍵按下後觸發
  • onKeyUp(int, KeyEvent) 有按鍵按下後彈起時觸發
  • onTrackballEvent(MotionEvent) 軌跡球事件
  • onTouchEvent(MotionEvent) 觸屏事件
  • onFocusChanged(boolean, int, Rect) 當View獲取或失去焦點時觸發
  • onWindowFocusChanged(boolean) 當窗口包含的view獲取或失去焦點時觸發
  • onAttachedToWindow() 當view被附着到一個窗口時觸發
  • onDetachedFromWindow() 當view離開附着的窗口時觸發,Android123提示該方法和  onAttachedToWindow() 是相反的。
  • onWindowVisibilityChanged(int) 當窗口中包含的可見的view發生變化時觸發
相關文章
相關標籤/搜索