Android:UI控件RatingBar、SeekBar、ProgressBar、RadioGroup、RadioButton、Check...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 public class MainActivity extends Activity implements OnClickListener { @Override protected void onCreate(BundlesavedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener( this ); findViewById(R.id.button2).setOnClickListener( this ); findViewById(R.id.button3).setOnClickListener( this ); findViewById(R.id.button4).setOnClickListener( this ); findViewById(R.id.button5).setOnClickListener( this ); findViewById(R.id.button6).setOnClickListener( this ); } @Override public boolean onCreateOptionsMenu(Menumenu) { getMenuInflater().inflate(R.menu.activity_main,menu); return true ; } @Override public void onClick(Viewv) { switch (v.getId()) { case R.id.button1: btn1Click(); break ; case R.id.button2: btn2Click(); break ; case R.id.button3: btn3Click(); break ; case R.id.button4: btn4Click(); break ; case R.id.button5: btn5Click(); break ; case R.id.button6: btn6Click(); btn7Click(); break ; default : break ; } } private void btn7Click() //评分条 { RatingBarratingBar=(RatingBar)findViewById(R.id.ratingBar1); ratingBar.setNumStars( 5 ); ratingBar.setRating(( float ) 0.5 ); //默认显示的星星数 ratingBar.setOnRatingBarChangeListener( new OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBarratingBar, float rating, boolean fromUser) { Log.e( "RatingBar" , "onRatingChanged:" +rating); } }); } private void btn6Click() //可操作进度条 { SeekBarseekBar=(SeekBar)findViewById(R.id.seekBar1); seekBar.setOnSeekBarChangeListener( new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBarseekBar) //停止拖动 { Log.e( "SeekBar" , "onStopTrackingTouch" ); } @Override public void onStartTrackingTouch(SeekBarseekBar) //开始拖动 { Log.e( "SeekBar" , "onStartTrackingTouch" ); } @Override //进度改变 public void onProgressChanged(SeekBarseekBar, int progress, boolean fromUser) { Log.e( "SeekBar" , "onProgressChanged" ); } }); } private int progress= 0 ; private void btn5Click() //进度条 { ProgressBarprogressBar=(ProgressBar)findViewById(R.id.progressBar2); progressBar.setProgress(progress++); progressBar.setMax( 100 ); } private void btn4Click() //单选按钮 { RadioGroupradioGroup=(RadioGroup)findViewById(R.id.radioGroup1); int id=radioGroup.getCheckedRadioButtonId(); RadioButtonradioButton=(RadioButton)findViewById(id); Stringstr=radioButton.getText().toString(); TextViewtextView=(TextView)findViewById(R.id.textView1); switch (id) { case R.id.radio0: textView.setText(str); break ; case R.id.radio1: textView.setText(str); break ; case R.id.radio2: textView.setText(str); break ; default : break ; } } private void btn3Click() //设置圆形进度条消失(不占位置) { findViewById(R.id.progressBar1).setVisibility(View.GONE); } private void btn2Click() //设置圆形进度条为隐形(原位置空白) { findViewById(R.id.progressBar1).setVisibility(View.INVISIBLE); } private void btn1Click() //复选框 { CheckBoxcheckBox1=(CheckBox)findViewById(R.id.checkBox1); CheckBoxcheckBox2=(CheckBox)findViewById(R.id.checkBox2); CheckBoxcheckBox3=(CheckBox)findViewById(R.id.checkBox3); TextViewtextView=(TextView)findViewById(R.id.textView1); StringBufferstr= new StringBuffer(); if (checkBox1.isChecked()) { str.append(checkBox1.getText()); } if (checkBox2.isChecked()) { str.append(checkBox2.getText()); } if (checkBox3.isChecked()) { str.append(checkBox3.getText()); } textView.setText(str); } } 1.代码实现按钮点击方法 1 button.PerformClick() 注:只有当button.Enabled为true ==============================UI控件属性相关============================== 控件自定义: 1.圆形progressbar 系统styles里找到progressbar的style属性: 1 2 3 4 5 6 7 8 9 <stylename= "Widget.ProgressBar" > <itemname= "android:indeterminateOnly" > true </item> <itemname= "android:indeterminateDrawable" > @android :drawable/progress_medium_white</item> <itemname= "android:indeterminateBehavior" >repeat</item> <itemname= "android:indeterminateDuration" > 3500 </item> <itemname= "android:minWidth" >48dip</item> <itemname= "android:maxWidth" >48dip</item> <itemname= "android:minHeight" >48dip</item> <itemname= "android:maxHeight" >48dip</item> 其中,下面这句决定背景图案的设置,这个属性添加到控件的属性里: 1 <itemname= "android:indeterminateDrawable" >@android:drawable/progress_medium_white</item> 将系统的drawable文件夹找到progress_medium_white.xml复制到自己的项目里,并进行修改: 1 2 3 4 5 <animated-rotatexmlns:android= "http://schemas.android.com/apk/res/android" android:drawable= "@drawable/ic_launcher" android:pivotX= "50%" android:pivotY= "50%" /> 2.进度progressbar 系统style文件内容: 1 2 3 4 5 6 <stylename= "Widget.ProgressBar.Horizontal" > <itemname= "android:indeterminateOnly" > false </item> <itemname= "android:progressDrawable" > @android :drawable/progress_horizontal</item> <itemname= "android:indeterminateDrawable" > @android :drawable/progress_indeterminate_horizontal</item> <itemname= "android:minHeight" >20dip</item> <itemname= "android:maxHeight" >20dip</item> 关联的属性为: 1 name= "android:progressDrawable" 修改progress_horizontal.xml: 1 2 3 4 5 6 7 8 <layer-listxmlns:android= "http://schemas.android.com/apk/res/android" > <itemandroid:id= "@android:id/background" android:drawable= "@drawable/progress_bg" > </item> <itemandroid:id= "@android:id/secondaryProgress" android:drawable= "@drawable/progress_second" > </item> <itemandroid:id= "@android:id/progress" android:drawable= "@drawable/progress_color" > </item> </layer-list> 控件基本属性: (1)修改属性style 1 style= "?android:attr/progressBarStyleHorizontal" (2)最大进度值为100 1 android:max= "100" (3)初始化的进度值 1 android:secondaryProgress= "70" (4)设置为无限进度 1 android:indeterminate= "true" (5)代码设置样式 1 2 3 4 5 ProgressBarprogressBar= new ProgressBar( this ); progressBar.setIndeterminate( false ); progressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal)); progressBar.setIndeterminateDrawable(getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal)); progressBar.setMinimumHeight( 20 ); 3.seekbar: 类似于progressbar,只是多了个拖动按钮。 添加一个thumb属性:实际上是个selector的按钮。 4.ratingbar: 搜索ratingbar的xml文件进行修改,关联属性:progressDrawable。 以4.2版本里ratingbar_full_holo_dark的风格为例: ratingbar_full_empty_holo_dark.xml代码: 1 2 3 4 5 6 7 8 9 10 11 12 <selectorxmlns:android= "http://schemas.android.com/apk/res/android" > <itemandroid:state_pressed= "true" android:state_window_focused= "true" android:drawable= "@drawable/btn_rating_star_off_pressed_holo_dark" /> <itemandroid:state_focused= "true" android:state_window_focused= "true" android:drawable= "@drawable/btn_rating_star_off_focused_holo_dark" /> <itemandroid:state_selected= "true" android:state_window_focused= "true" android:drawable= "@drawable/btn_rating_star_off_focused_holo_dark" /> <itemandroid:drawable= "@drawable/btn_rating_star_off_normal_holo_dark" /> </selector> ratingbar_full_filled_holo_dark.xml代码: 1 2 3 4 5 6 7 8 9 10 11 12 <selectorxmlns:android= "http://schemas.android.com/apk/res/android" > <itemandroid:state_pressed= "true" android:state_window_focused= "true" android:drawable= "@drawable/btn_rating_star_on_pressed_holo_dark" /> <itemandroid:state_focused= "true" android:state_window_focused= "true" android:drawable= "@drawable/btn_rating_star_on_focused_holo_dark" /> <itemandroid:state_selected= "true" android:state_window_focused= "true" android:drawable= "@drawable/btn_rating_star_on_focused_holo_dark" /> <itemandroid:drawable= "@drawable/btn_rating_star_on_normal_holo_dark" /> </selector> rating_style.xml代码: 1 2 3 4 5 <layer-listxmlns:android= "http://schemas.android.com/apk/res/android" > <itemandroid:id= "@+android:id/background" android:drawable= "@drawable/ratingbar_full_empty_holo_dark" /> <itemandroid:id= "@+android:id/secondaryProgress" android:drawable= "@drawable/ratingbar_full_empty_holo_dark" /> <itemandroid:id= "@+android:id/progress" android:drawable= "@drawable/ratingbar_full_filled_holo_dark" /> </layer-list> XML文件代码: 1 2 3 4 5 6 7 8 <RatingBar android:id= "@+id/ratingBar1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:progressDrawable= "@drawable/rating_style" android:layout_alignParentBottom= "true" android:layout_centerHorizontal= "true" android:layout_marginBottom= "35dp" /> 5.checkbox和radiobutton: checkbox可以直接添加一个属性修改为star风格: 1 android:style= "?android:attr/starStyle" 关联属性: 1 android:button= "@drawable/checkbox_selector" XML代码: 1 2 3 4 5 6 7 8 9 <CheckBox android:id= "@+id/checkBox1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:layout_alignParentTop= "true" android:layout_centerHorizontal= "true" android:layout_marginTop= "58dp" android:button= "@drawable/checkbox_selector" android:text= "CheckBox" /> selector代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xmlversion= "1.0" encoding= "utf-8" ?> <selectorxmlns:android= "http://schemas.android.com/apk/res/android" > <itemandroid:state_checked= "true" android:state_pressed= "false" android:drawable= "@drawable/checkbox_cart_goods_on" ></item> <itemandroid:state_checked= "true" android:state_pressed= "true" android:drawable= "@drawable/checkbox_on" ></item> <itemandroid:state_checked= "false" android:state_pressed= "true" android:drawable= "@drawable/checkbox_off" ></item> <itemandroid:state_checked= "false" android:state_pressed= "false" android:drawable= "@drawable/checkbox_normal" ></item> </selector> 监听事件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 mIv_CheckXieyi.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButtonbuttonView, boolean isChecked) { if (isChecked) { Log.e( "" , "updateCheckBox===false" ); } else { Log.e( "" , "updateCheckBox===true" ); } } }); 注: 左侧的图案直接使用button无法出现时,可使用drawableLeft设置,如下: 1 2 3 4 5 6 7 8 9 <RadioButton android:id= "@+id/routemenu_tab_walk" style= "@style/tab_title_maproute" android:drawableLeft= "@drawable/selector_route_walk" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:layout_weight= "1" android:background= "@drawable/selector_tab_bg_left" android:text= "步行" /> 其中tab_title_maproute.xml代码如下: 1 2 3 4 5 6 7 8 9 10 <stylename= "tab_title_maproute" parent= "tab_title_newslist" > <itemname= "android:button" > @null </item> <itemname= "android:paddingLeft" >8dp</item> <itemname= "android:paddingRight" >8dp</item> <itemname= "android:textColor" > @color /white</item> <itemname= "android:textSize" >15sp</item> <itemname= "android:height" > @dimen /photo_gallery_tab_hight</item> <itemname= "android:background" > @drawable /selector_tab_bg_center</item> <itemname= "android:gravity" >center</item> </style> 其中selector_route_walk.xml代码如下: 1 2 3 4 5 6 7 8 9 10 <?xmlversion= "1.0" encoding= "utf-8" ?> <selectorxmlns:android= "http://schemas.android.com/apk/res/android" > <itemandroid:state_checked= "true" android:drawable= "@drawable/route_walk_nor" ></item> <itemandroid:state_pressed= "true" android:drawable= "@drawable/route_walk_nor" ></item> <itemandroid:state_selected= "true" android:drawable= "@drawable/route_walk_nor" ></item> <itemandroid:drawable= "@drawable/route_walk_pressed" ></item> </selector> 6.TextView相关: (1)DrawableTop在代码中的实现方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public ViewgetView( int position,ViewconvertView,ViewGroupparent) { LayoutInflaterinflater=getLayoutInflater(); TextViewtextView= null ; if (position== 0 ||position== 2 ||position== 8 ) { textView=(TextView)inflater.inflate( R.layout.navi_menu_item_separator, null ); } else { textView=(TextView)inflater.inflate( R.layout.navi_menu_item, null ); Drawabledrawable=getResources().getDrawable(ICONS[position]); drawable.setBounds( 0 , 0 ,drawable.getMinimumWidth(),drawable.getMinimumHeight()); textView.setCompoundDrawables(drawable, null , null , null ); //四个参数分别对应为上下左右,相当于xml里对textview设置drawabletop } textView.setText(TITLES[position]); return textView; } (2)文本添加链接功能的属性autolink: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Override protected void onCreate(BundlesavedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.link); /* *APIdemo里:com.example.android.apis.text; */ SpannableStringss= new SpannableString( "text4:Manuallycreatedspans.Clickheretodialthephone." ); ss.setSpan( new StyleSpan(Typeface.BOLD), 0 , 30 ,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //setSpan方法可以用来根据判断文本位置设置文本特定类型 ss.setSpan( new URLSpan( "tel:4155551212" ), 31 + 6 , 31 + 10 ,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); TextViewt4=(TextView)findViewById(R.id.text4); t4.setText(ss); t4.setMovementMethod(LinkMovementMethod.getInstance()); } (3)为文字加阴影 1 2 3 4 5 6 7 8 9 10 11 12 <TextViewandroid:id= "@+id/tvText1" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "text1" android:textSize= "28sp" android:textStyle= "bold" android:textColor= "#FFFFFF" android:shadowColor= "#ff000000" //阴影颜色 android:shadowDx= "2" //阴影的水平偏移量 android:shadowDy= "2" //阴影的垂直偏移量 android:shadowRadius= "1" //阴影的范围 /> (4)添加下划线 如果是在资源文件里,可以这样写: 1 2 3 4 5 <resources> <stringname= "hello" ><u>phone: 1390123456 </u></string> <stringname= "app_name" >MyLink</string> </resources> 如果是代码这样写. 1 2 TextViewtextView=(TextView)findViewById(R.id.testView); textView.setText(Html.fromHtml( "<u>" + "hahaha" + "</u>" )); 或者也可以这样写: 1 textview.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下划线 (5)通过字符串格式拼凑文本 1 2 3 4 Stringcontent=TextUtil.preventEmpty(comment.content); StringreplyToUserName=comment.replyToUser.username; StringContentBody=APP.getInstance().getString(R.string.discuss_content,replyToUserName,content); tvDiscussContent.setText(ContentBody); xml资源内写法: 1 <stringname= "discuss_content" >回复% 1 $s:% 2 $s</string> (6)设置部分字体颜色 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 textView=(TextView)findViewById(R.id.textview); SpannableStringBuilderbuilder= new SpannableStringBuilder(textView.getText().toString()); //ForegroundColorSpan为文字前景色,BackgroundColorSpan为文字背景色 ForegroundColorSpanredSpan= new ForegroundColorSpan(Color.RED); ForegroundColorSpanwhiteSpan= new ForegroundColorSpan(Color.WHITE); ForegroundColorSpanblueSpan= new ForegroundColorSpan(Color.BLUE); ForegroundColorSpangreenSpan= new ForegroundColorSpan(Color.GREEN); ForegroundColorSpanyellowSpan= new ForegroundColorSpan(Color.YELLOW); builder.setSpan(redSpan, 0 , 1 ,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); builder.setSpan(whiteSpan, 1 , 2 ,Spannable.SPAN_INCLUSIVE_INCLUSIVE); builder.setSpan(blueSpan, 2 , 3 ,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); builder.setSpan(greenSpan, 3 , 4 ,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); builder.setSpan(yellowSpan, 4 , 5 ,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(builder); (7)设置style: 1 textView.setTextAppearance(mContext,R.style.labels); (8)长按复制,api>11 1 android:textIsSelectable= "true" 6.EditText相关: 1.设置默认提示: 1 2 android:hint= "请输入姓名" android:textColorHint= "#ff00ff00" android:background="@null"去掉输入框 2.取消焦点和请求焦点方法 1 2 //取消焦点 mEt_login_name.setFocusable( false ); 1 2 3 4 //请求焦点 mEt_login_name.setFocusableInTouchMode( true ); mEt_login_name.setFocusable( true ); mEt_login_name.requestFocus(); 3.监听编辑框字数 1 2 3 //字数变化 mEt_content.addTextChangedListener( this ); onTextChanged(mEt_content.getText(), 0 ,mEt_content.length(), 0 ); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /** *******************监听编辑框输入字数********************************** */ @Override public void afterTextChanged(Editables) { } @Override public void beforeTextChanged(CharSequences, int start, int count, int after) { } @Override public void onTextChanged(CharSequences, int start, int before, int count) { int remain=MAX_TEXT_COUNT-mEt_content.length(); mTv_counter.setText(String.valueOf(remain)); mTv_counter.setTextColor(remain> 0 ? 0xffcfcfcf : 0xffff0000 ); } 4.监听编辑框输入回车键 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 mEt_jianhuo.setOnKeyListener( new OnKeyListener() { @Override public boolean onKey(Viewv, int keyCode,KeyEventevent) { if (KeyEvent.KEYCODE_ENTER==keyCode&&event.getAction()==KeyEvent.ACTION_DOWN) { Log.e( "mEt_jianhuo" , "enter" ); saoMaCheckedToServer(mEt_jianhuo.getText().toString()+ "" ,mData.getId()+ "" ,isUseAvg()); return true ; } return false ; } }); 5.设置软键盘回车键显示为"下一条"或者"完成"等 主要属性: imeActionLabel imeOptions singleLine 1 2 3 4 5 6 7 8 9 10 <EditText android:id= "@+id/hm_saoma_et_quxiao" android:layout_width= "wrap_content" android:layout_height= "40dp" android:layout_weight= "1" android:imeOptions= "actionNext" android:imeActionLabel= "下一条" android:singleLine= "true" android:ems= "15" /> 1 2 3 4 5 6 7 8 9 <EditText android:id= "@+id/hm_saoma_et_quxiao" android:layout_width= "wrap_content" android:layout_height= "40dp" android:layout_weight= "1" android:ems= "15" android:imeActionLabel= "完成" android:imeOptions= "actionDone" android:singleLine= "true" /> 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1200354,如需转载请自行联系原作者