android : orientation ? ? (horizontal/vertical)? 設置布局水平還是垂直,默認是垂直? LinearLayout中使用
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比孟津網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式孟津網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋孟津地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
a ndroid : checked? (true/false) 標記默認選中,如果是單選則選中最后一個 RadioButton、CheckBox中使用
android: layout_gravity ? (center/right/left/bottom/top) 父布局中的位置?
android: gravity (center/right/left/bottom/top)自己內容的位置 ?比如Button中的text 的位置
android: hint ? (string)? ? 提示信息,當文本框為空的時候顯示,點擊消失 ?Edittext中使用
android: singleLine ? (true/false)? 設置單行輸入,一旦設置為true,則文字不會自動換行
android:textColor(#123456) ?設置字體顏色
android: textStyle (bold/italic/bolditalic)設置字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設置一個或多個,用“|”隔開
android:textSize ?(20sp)設置字體大小
android:editable(true/false)是否可編輯 ?edittext中才有效
android:textColorHighlight (#ffffff) 文字底色
android:textColorHint (#ffffff)提示文字顏色 edittext中才有效
android:textScaleX (1.5)文字距離
android:background ?設置背景 ?可以是圖片、顏色、@drawable/中的樣式
android:layout_weight (1、2、3)權重 ?一般用在linearLayout中的
android:autoLink(none、web、email、phone、map、all)設置是否當文本為URL鏈接/email/電話號碼/map時,文本顯示為可點擊的鏈接
android: cursorVisible ?(true/false)設置光標是否顯示
android: digits (123asdasaf/正則表達式) 限制輸入內容
android: ellipsize (start、end、middle、marquee)設置當文字過長時,該控件該如何顯示。有如下值設置:”start”省略號顯示在開頭;”end”省略號顯示在結尾;”middle”省略號顯示在中間;”marquee”以跑馬燈的方式顯示(動畫橫向移動)
android :inputType ? (none、text、textCapCharacters字母大小、textCapWords單詞首字母大小、textCapSentences僅第一個字母大小、textAutoCorrect、textAutoComplete自動完成、textMultiLine多行輸入、textImeMultiLine輸入法多行(如果支持)、textNoSuggestions不提示、textEmailAddress電子郵件地址、textEmailSubject郵件主題、textShortMessage短信息(會多一個表情按鈕出來)、textLongMessage長訊息?、textPersonName人名、textPostalAddress地址、textPassword密碼、textVisiblePassword可見密碼、textWebEditText作為網(wǎng)頁表單的文本、textFilte文本篩選過濾、textPhonetic拼音輸入、numberSigned有符號數(shù)字格式、numberDecimal可帶小數(shù)點的浮點格式、phone電話號碼、datetime時間日期、date日期、time時間。)設置文本類型
android: maxLines ? ? 設置文本的最大顯示行數(shù),與width或者layout_width結合使用,超出部分自動換行,超出行數(shù)將不顯示
android:minLines? 設置文本的最小行數(shù)
android:scrollHorizontally? 設置文本超出TextView的寬度的情況下,是否出現(xiàn)橫拉條。
android:clickable (true/false) view是否能對click事件作出反應
android:onClick? 當view被click之后,view的context的哪個方法被呼叫。通常這個context是指view所在的Activity。例如:android:onClick='sayHello',則相應的Activity里面有一個方法public void sayHello(View view)方法,當這個view被click之后,sayHello方法就會被調用。
android:longClickable? true/false? view是否可以對長時間的click事件作出反應。
EditView 是Android開發(fā)當中運用到最多的控件之一,主要用戶界面上的輸入框。
View -- TextView -- EditView 。
1.設置提示文本:
2.設置hint提示文字顏色:
3.設置輸入文本后的文字顏色:
4.設置輸入文本后的字體大小:
5.設置輸入文本后的字體樣式,bold(加粗),italic(傾斜),normal(默認是正常字體)。
6.設置被選中字體的顏色.默認為 Theme 主題中的 “colorAccent”的顏色。
7.設置被光標的顏色.默認為 Theme 主題中的 “colorAccent”的顏色。
8.設置文本的水平縮放系數(shù)。
9.設置hint提示文本的字體.normal(默認)\monospace\sans\serif。
10.設置EditText背景."@null"設置背景為透明.當我們設置背景后,EditText的下劃線就會消失。
11.設置文本的顏色,字體,大小和樣式。
12.設置只接收指定的文本內容,適合只能輸出特定內容的需求。
13.設置文本的類型,用于幫助輸入法顯示合適的鍵盤類型。
14.設置EditText最多接受的文本的個數(shù):
15.設置EditText顯示的行數(shù),設置兩行就顯示兩行,即使第二行沒有數(shù)據(jù)。
16.設置行間距的倍數(shù). 如設置成1.5倍。
17.設置右下角IME動作與編輯框相關的動作,如actionDone右下角將顯示一個“完成”,而不設置默認是一個回車符號.
每個view的坐標系原點為左上角那個點,水平方向為x軸,右正左負,豎直方向為y軸,下正上負。
canvas.drawColor //繪制區(qū)域涂上顏色(設置底色/蒙層)
canvas.drawCircle(float centerX(圓心X坐標),float centerY(圓心Y坐標),float radius(圓的半徑,單位像素),Paint paint)
canvas.drawBitmap
canvas.drawRect(float left,float top,float right,float bottom,Paint paint) //畫矩形
canvas.drawRect(RecF rect,Paint paint)
canvas.drawRect(Rect rect,Paint paint)
canvas.drawPoint(float x(點X軸坐標),float y(點Y軸坐標),Paint paint)//畫點
點的大小 -paint.setStrokeWidth(width)
點的形狀 -paint.setStrokeCap(cap)
ROUND(圓形),BUTT(平頭),SQUARE(方頭)
canvas.drawPoints()//批量畫點
canvas.drawOval(float left(左邊界點),float top(上邊界點),float right(右邊界點),float bottom(下邊界點),Paint paint) //畫橢圓
canvas.drawLine(float startX(起點X軸坐標),float startY(起點Y軸坐標),float stopX(終點X軸坐標),float stopY(終點X軸坐標),Paint paint) (setStyle對直線沒有影響)
canvas.drawLines(批量畫線)
canvas.drawRoundRect(float left,float top,float right,float bottom,float rx(圓角的橫向半徑),float ry(圓角的縱向坐標),Paint paint)//畫圓角矩形
canvas.drawRoundRect(RectF rect,float rx, float ry,Paint paint)
canvas.drawArc(float left, float top, float right, float bottom, float startAngle(起始角度,順時針為正,逆時針為負), float sweepAngle(弧形劃過角度), boolean useCenter(是否連接到圓心), Paint paint) //繪制弧形或扇形 根據(jù)弧形所在橢圓進行繪制
canvas.drawPath() //通過描述路徑的方式來繪制圖形
path.addXxx() —添加子圖形
path.addCircle(x,y,radius,dir(路徑方向:順時針/逆時針))
path.xxxTo —畫線
path.lineTo()
path.rLineTo()
path.close() —封閉當前圖形
path.setFillType(Path.FillType ft) //設置填充模式
canvas.drawBitmap(Bitmap bitmap,float left,float top,Paint paint);//畫bitmap
canvas.drawBitmap(Bitmap bitmap,Rect src,RectF dst,Paint paint)
canvas.drawBitmap(Bitmap bitmap,Rect src,Rect dst,Paint paint)
canvas.drawBitmap(Bitmap bitmap,Matrix matrix,Paint paint)
canvas.drawText(String text,float x(起點x坐標),float y(起點y坐標),Paint paint) //繪制文字
Paint.setStyle //設置繪制模式
FILL 填充模式(默認)
STROKE 畫線模式
FILL_AND_STROKE 既畫線又填充
Paint.setStrokeWidth //設置線條寬度 (僅在style:Stroke、FILL_AND_STROLE下有效)
Paint.setTextSize //設置文字大小
Paint.setAntiAlias //設置抗鋸齒開關
Paint.setTextSize(float textSize)//設置文字大小
Paint.setStrokeJoin(Paint.Join join) //設置拐角的形狀
MITER//尖角(默認)
BEVEL//平角
ROUND//圓角
Paint.setStokeMiter(float miter)//設置MITER型拐角的延長線的最大值
設置顏色
直接設置顏色
Paint.setColor(int color)
Paint.setARGB(int a,int r,int g,int b)
Paint.setShader(Shader shader) //設置shader
LinearGradient 線性漸變
RadialGradient 輻射漸變
SweepGradient 掃描漸變
BitmapShader 用bitmap的像素來作為圖形或文字的填充
ComposeShader 混合著色器,多個shader混合使用
Paint.setColorFilter(ColorFilter colorFilter) //設置顏色過濾
Paint.setXfermode(Xfermode xfermode) //以要繪制的內容為源圖像,以View中已有內容作為目標圖像,選取一個PorterDuff.Mode作為繪制內容的顏色處理方案。
色彩優(yōu)化
Paint.setDither(boolean dither) //設置抖動來優(yōu)化色彩深度降低時的繪制效果
Paint.setFilterBitmap(boolean filter) //設置雙線性過濾優(yōu)化Bitmap放大繪制的效果
可以理解為 由馬賽克變成模糊狀態(tài)
Paint.setPathEffect(PathEffect effect)//使用PathEffect設置形狀的輪廓效果
CornerPathEffect//把所有的拐角變成圓角
DiscretePathEffect//把線條進行隨機的偏離
DashPathEffect//使用虛線
PathDashPathEffect//使用一個Path來繪制虛線
SumPathEffect//組合效果
ComposePathEffect//組合效果,組合有先后順序
Paint.setShadowLayer(float radius,float dx,float dy,int shadowColor)//添加陰影
Paint.setMaskFilter(MaskFilter maskfilter)//在繪制層上方的附加效果
BlurMaskFilter //模糊效果
new BlurMaskFilter(float radius(模糊范圍),BlurMaskFilter.Blur style(模糊類型))
EmbossMaskFilter//浮雕效果
new EmbossMaskFilter(float[] direction(光源的方向),float ambient(環(huán)境光強度),float specular(炫光系數(shù)),float blurRadius(光線范圍))
獲取繪制的Path
getFillPath(Path src,Path dst)//實際path
getTextPath(Stirng text,int start,int end,float x,float y,Path)/getTextPath(char[] text,int index,int count,float x,float y,Path path)//文字的path
drawTextOnPath()//沿一條Path來繪制文字
StaticLayout //繪制文字,支持換行
paint.setFakeBoldText(booleab fakeBoldText)//是否使用偽粗體
paint.setStrikeThruText()//是否加刪除線
paint.setUnderLineText(boolean underlineText)//是否加下劃線
paint.setTextSkewX(float skewX)//設置文字橫向錯切角度
paint.setTextScaleX(float scaleX)//設置文字橫向放縮
paint.setLetterSpacing(float letterSpacing)//設置字符間距,默認為0
paint.setTextAlign(Paint.Align align)//LEFT、CENTER、RIGHT默認為LEFT
paint.setTextLocale(Locale locale)/paint.setTextLocales(LocaleList locales) //設置繪制所用的地域
paint.setHinting(int mode)//是否啟用字體微調
測量文字尺寸類:
paint.getFontSpacing();//獲取推薦的行距
paint.getFontMetrics();//獲取point的FontMetrics
baseline:基準線
ascent/descent:普通字符的頂部和底部范圍
top/bottom:限制字型的頂部和底部
leading:行的額外間距,即上一行字的bottm與下一行字的top距離
paint.getTextBounds(String text(測量的文字),int start(文字的起始位置),int end(文字的結束位置),Rect bounds(文字顯示范圍的對象))//獲取文字的顯示范圍
paint.measureText(String text)//測量文字占用的寬度
measureText()getTextBounds()
paint.getTextWidths(String text,float[] widths)//獲取字符串中每個字符的寬度,并把結果填入?yún)?shù)widths
paint.breakText(String text((要測量的文字),boolean measureForwards(測量的方向),float maxWidth(寬度上限(超出上限會截斷文字)),float[] measuredWidth(用于接受數(shù)據(jù)))//測量完成后會把文字寬度賦給measureWidth[0]
paint.getRunAdvance(CharSequence text,int start(文字的起始坐標),int end(文字的結束坐標),int contextStart(上下文的起始坐標),int ContextEnd(上下文的結束坐標),boolean isRtl(文字的方向),int offset(字數(shù)的偏移))//計算某個字符處光標的x坐標
paint.getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)//計算出文字中最接近這個位置的字符偏移量
paint.hasGlyph(String s)//檢查指定的字符串是否是一個單獨的字型
canvas.clipRect()//范圍裁剪
canvas.clipPath()//根據(jù)范圍裁剪
canvas.translate(float dx,float dy)//位移
canvas.rotate(float degrees,float px,float py)//旋轉
canvas.scale(float sx(橫向縮放倍數(shù)),float sy(縱向縮放倍數(shù)),float px,float py)//縮放
canvas.skew(float sx(x軸的錯切系數(shù)),float sy(y軸的錯切系數(shù)))//錯切
canvas.setMatrix(matrix)//用Matrix直接替換Canvas當前的變換矩陣
canvas.concat(matrix)//用Canvas當前的變換矩陣和Matrix相乘
Camera.rotate*()//三維旋轉
1、super.draw()//總調度方法
2、super.onDraw()
3、dispatchDraw()//繪制子View的方法
繪制順序:
draw()總調度方法,view的繪制過程都發(fā)生在draw()方法里
1、背景(drawBackground()不能重寫)-------android:background:/View.setBackgroundXxx()
2、主體(onDraw())
3、子View(dispatchDraw())
4、滑動邊緣漸變和滑動條(onDrawForeground())-------android:scrollbarXxx/View.setXXXScrollBarXXX()
5、前景(onDrawForeground())-------android:foreground/View.setForeground()
view.animate().translationX()//x軸偏移
1、如果是自定義控件,需要添加setter、getter方法
2、ObjectAnimator.ofXXX()創(chuàng)建ObjectAnimator對象
3、用start()方法執(zhí)行動畫
setDuration(int duration)//設置動畫時長
setInterpolator(Interpolator interpolator)//設置插值器
ViewPropertyAnimator.setListener()/ObjectAnimator.addListener()
ViewPropertyAnimator.setUpdateListener()/ObjectAnimator.addUpdateListener()
ObjectAnimator.addPauseListener()
ViewPropertyAnimator.withStartAction/EndAction()
ArgbEvaluator//顏色漸變動畫
PropertyValuesHolder//同一個動畫中改變多個屬性
PropertyValuesHolders.ofKeyframe()//把同一個屬性拆分
AnimatorSet//多個動畫配合執(zhí)行
targetSdkVersion=14,硬件加速默認開啟
view.setLayerType()
LAYER_TYPE_SOFTWARE:使用軟件來繪制View Layer,繪制到Bitmap,并順便關閉硬件加速
LAYER_TYPE_HARDWARE:使用GPU來繪制View Layer,繪制到OpenGL texture(如果硬件加速關閉,那么行為和LAYER_TYPE_SOFTWARE一致)
LAYER_TYPE_NONE:關閉View Layer
View Layer可以加速無invalidate()(例如動畫)時的刷新效率,但對于需要調用invalidate()的刷新無法加速
硬件加速并不支持所有的繪制操作
1、測量(measure)
View:View在onMeasuer中會計算自己的尺寸然后保存
ViewGroup:ViewGroup在onMeasure中會調用所有子View的measure讓它們進行自我測量,并根據(jù)子View
計算出的期望尺寸來計算他們的事跡尺寸和位置然后保存。
2、布局(layout)
View:無子View所以onLayout不做任何處理
ViewGroup:ViewGroup在onLayout中會調用自己所有子View的layout方法,把他們的尺寸、位置傳給他們, 讓他們完成自我布局。
MeasureSpec = mode + size :父類傳遞過來給當前View的一個建議值
MeasureSpec.getMode(int spec)//獲取模式
MeasureSpec.getSize(int spec)//獲取數(shù)值
限制分類:
UNSPECIFIED(不限制)
AT_MOST(限制上限)-wrap_content
EXACTLY(限制固定值)-match_parent/具體值
1、重寫onMeasure來修改已有的View尺寸
(1)、重寫onMeasure方法,調用super.onMeasure觸發(fā)原有的自我測量。
(2)、在super.onMeasure下用getMeasureWidth與getMeasureHeigh獲取之前測量的結果,使用自己的算法計算新結果。
(3)、調用setMeasureDimension保存新結果。
2、重寫onMeasure來全新定制自定義View的尺寸
與1區(qū)別,保證計算的同時,保證結果滿足父View給出的尺寸限制
(1)重寫onMeasure,計算出View的尺寸
(2)使用resolve讓子View的計算結果符合父View的限制,也可不使用該方法自己定義
3、重寫onMeasure和onLayout來全新定制自定義ViewGroup的內部布局
兩個注意點:
子控件間的margin值
1、重寫generateLayoutParams()和generateDefaultLayoutParams()
2、獲取margin值 MarginLayoutParams lp = (MarginLayoutParams )child.getLayoutParams()
子控件間的padding值
1、測量后直接getPaddingLeft、getPaddingTop、getPaddingRight、getPaddingBottom
重寫onMeasure來計算內部布局
(1)調用每個子View的measure來計算子View的尺寸
結合layout_xxx和自己可用空間
(2)計算子View的位置并保存子View的尺寸和位置
(3)計算自己的尺寸并用setMeasureDimension保存
重寫onLayout來擺放子View
(1)調用每個子View的layout,讓他們保存自己的位置和尺寸
view工作原理
觸摸事件
1、ACTION_DOWN:手指剛接觸屏幕,按下去的那一瞬間
2、ACTION_MOVE:手指在屏幕上移動
3、ACTION_UP:手指從屏幕上松開的瞬間
事件序列:從ACTION_DOWN - ACTION_UP
ViewGroup:
DispatchTouchEvent
? return true:表示該View內部消化掉了所有事件
? return false:表示事件在本層不再繼續(xù)進行分發(fā),并交由上層控件的onTouchEvent方法進行消費
? return super.dispatchTouchEvent(ev):默認事件將分發(fā)給本層的事件攔截onInterceptTouchEvent方法 進行處理
OnInterceptTouchEvent
? return true:表示將事件進行攔截,并將攔截到的事件交由本層控件的onTouchEvent進行處理
? return false:表示不對事件進行攔截,事件得以成功分發(fā)到子View
? return super.onInterceptTouchEvent(ev):默認表示不攔截該事件,并將事件傳遞給下一層View的 dispatchTouchEvent
OnTouchEvent 默認false
? return true:表示onTouchEvent處理完事件后消費了此次事件
? return fasle:表示不響應事件,那么該事件將會不斷向上層View的onTouchEvent方法傳遞,直到某個View的 onTouchEvent方法返回true
? return super.dispatchTouchEvent(ev):表示不響應事件,結果與return false一樣
子View不存在分發(fā):
? DispatchTouchEvent 事件分發(fā)
? OnTouchEvent 默認true
如下圖為事件分發(fā)流程圖:
---------------------- 以上總結部分源自Hencoder教程 ------------------------------
Android控件置底的方法:
1、使用android:layout_height="match_parent"將控件設置為占滿屏幕。
2、使用RelativeLayout包括控件,控件中增加android:layout_alignParentBottom="true" 表示放在父控件的最下方。
3、使用android:layout_gravity="bottom" 指定當前控件的位置為bottom即可。