public class MainActivity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { 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(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onClick(View v) { 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()//评分条 { RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar1); ratingBar.setNumStars(5); ratingBar.setRating((float) 0.5);//默认显示的星星数 ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating,boolean fromUser) { Log.e("RatingBar", "onRatingChanged:" + rating); } }); } private void btn6Click()//可操作进度条 { SeekBar seekBar= (SeekBar) findViewById(R.id.seekBar1); seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar)//停止拖动 { Log.e("SeekBar", "onStopTrackingTouch"); } @Override public void onStartTrackingTouch(SeekBar seekBar)//开始拖动 { Log.e("SeekBar", "onStartTrackingTouch"); } @Override//进度改变 public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { Log.e("SeekBar", "onProgressChanged"); } }); } private int progress = 0; private void btn5Click()//进度条 { ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar2); progressBar.setProgress(progress++); progressBar.setMax(100); } private void btn4Click()// 单选按钮 { RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radioGroup1); int id = radioGroup.getCheckedRadioButtonId(); RadioButton radioButton = (RadioButton) findViewById(id); String str = radioButton.getText().toString(); TextView textView = (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()//复选框 { CheckBox checkBox1 = (CheckBox) findViewById(R.id.checkBox1); CheckBox checkBox2 = (CheckBox) findViewById(R.id.checkBox2); CheckBox checkBox3 = (CheckBox) findViewById(R.id.checkBox3); TextView textView = (TextView) findViewById(R.id.textView1); StringBuffer str = 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.代码实现按钮点击方法
button.PerformClick()
注:只有当button.Enabled为true
==============================UI控件属性相关==============================
控件自定义:
1.圆形progressbar
系统styles里找到progressbar的style属性:
<style name="Widget.ProgressBar"> <item name="android:indeterminateOnly">true</item> <item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item> <item name="android:indeterminateBehavior">repeat</item> <item name="android:indeterminateDuration">3500</item> <item name="android:minWidth">48dip</item> <item name="android:maxWidth">48dip</item> <item name="android:minHeight">48dip</item> <item name="android:maxHeight">48dip</item>
其中,下面这句决定背景图案的设置,这个属性添加到控件的属性里:
<item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>
将系统的drawable文件夹找到progress_medium_white.xml复制到自己的项目里,并进行修改:
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_launcher" android:pivotX="50%" android:pivotY="50%" />
2.进度progressbar
系统style文件内容:
<style name="Widget.ProgressBar.Horizontal"> <item name="android:indeterminateOnly">false</item> <item name="android:progressDrawable">@android:drawable/progress_horizontal</item> <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item> <item name="android:minHeight">20dip</item> <item name="android:maxHeight">20dip</item>
关联的属性为:
name="android:progressDrawable"
修改progress_horizontal.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" android:drawable="@drawable/progress_bg"> </item> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/progress_second"> </item> <item android:id="@android:id/progress" android:drawable="@drawable/progress_color"> </item> </layer-list>
控件基本属性:
(1)修改属性style
style="?android:attr/progressBarStyleHorizontal"
(2)最大进度值为100
android:max="100"
(3)初始化的进度值
android:secondaryProgress="70"
(4)设置为无限进度
android:indeterminate="true"
(5)代码设置样式
ProgressBar progressBar = 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代码:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:state_window_focused="true" android:drawable="@drawable/btn_rating_star_off_pressed_holo_dark" /> <item android:state_focused="true" android:state_window_focused="true" android:drawable="@drawable/btn_rating_star_off_focused_holo_dark" /> <item android:state_selected="true" android:state_window_focused="true" android:drawable="@drawable/btn_rating_star_off_focused_holo_dark" /> <item android:drawable="@drawable/btn_rating_star_off_normal_holo_dark" /> </selector>
ratingbar_full_filled_holo_dark.xml代码:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:state_window_focused="true" android:drawable="@drawable/btn_rating_star_on_pressed_holo_dark" /> <item android:state_focused="true" android:state_window_focused="true" android:drawable="@drawable/btn_rating_star_on_focused_holo_dark" /> <item android:state_selected="true" android:state_window_focused="true" android:drawable="@drawable/btn_rating_star_on_focused_holo_dark" /> <item android:drawable="@drawable/btn_rating_star_on_normal_holo_dark" /> </selector>
rating_style.xml代码:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+android:id/background" android:drawable="@drawable/ratingbar_full_empty_holo_dark" /> <item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/ratingbar_full_empty_holo_dark" /> <item android:id="@+android:id/progress" android:drawable="@drawable/ratingbar_full_filled_holo_dark" /> </layer-list>
XML文件代码:
<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风格:
android:style="?android:attr/starStyle"
关联属性:
android:button="@drawable/checkbox_selector"
XML代码:
<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代码:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="true" android:state_pressed="false" android:drawable="@drawable/checkbox_cart_goods_on"></item> <item android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/checkbox_on"></item> <item android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/checkbox_off"></item> <item android:state_checked="false" android:state_pressed="false" android:drawable="@drawable/checkbox_normal"></item> </selector>
监听事件:
mIv_CheckXieyi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { Log.e("", "updateCheckBox===false"); } else { Log.e("", "updateCheckBox===true"); } } });
注:
左侧的图案直接使用button无法出现时,可使用drawableLeft设置,如下:
<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代码如下:
<style name="tab_title_maproute" parent="tab_title_newslist"> <item name="android:button">@null</item> <item name="android:paddingLeft">8dp</item> <item name="android:paddingRight">8dp</item> <item name="android:textColor">@color/white</item> <item name="android:textSize">15sp</item> <item name="android:height">@dimen/photo_gallery_tab_hight</item> <item name="android:background">@drawable/selector_tab_bg_center</item> <item name="android:gravity">center</item> </style>
其中selector_route_walk.xml代码如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="true" android:drawable="@drawable/route_walk_nor"></item> <item android:state_pressed="true" android:drawable="@drawable/route_walk_nor"></item> <item android:state_selected="true" android:drawable="@drawable/route_walk_nor"></item> <item android:drawable="@drawable/route_walk_pressed"></item> </selector>
6.TextView相关:
(1)DrawableTop在代码中的实现方法:
public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); TextView textView = 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); Drawable drawable = 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:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.link); /* * APIdemo里:com.example.android.apis.text; */ SpannableString ss = new SpannableString("text4: Manually created spans. Click here to dial the phone."); 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); TextView t4 = (TextView) findViewById(R.id.text4); t4.setText(ss); t4.setMovementMethod(LinkMovementMethod.getInstance()); }
(3)为文字加阴影
<TextView android: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)添加下划线
如果是在资源文件里,可以这样写:
<resources> <string name="hello"><u>phone: 1390123456</u></string> <string name="app_name">MyLink</string> </resources>
如果是代码这样写.
TextView textView = (TextView)findViewById(R.id.testView); textView.setText(Html.fromHtml("<u>"+"hahaha"+"</u>"));
或者也可以这样写:
textview.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线
(5)通过字符串格式拼凑文本
String content = TextUtil.preventEmpty(comment.content); String replyToUserName = comment.replyToUser.username; String ContentBody = APP.getInstance().getString(R.string.discuss_content,replyToUserName,content); tvDiscussContent.setText(ContentBody);
xml资源内写法:
<string name="discuss_content">回复 %1$s : %2$s </string>
(6)设置部分字体颜色
textView = (TextView) findViewById(R.id.textview); SpannableStringBuilder builder = new SpannableStringBuilder(textView.getText().toString()); //ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色 ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED); ForegroundColorSpan whiteSpan = new ForegroundColorSpan(Color.WHITE); ForegroundColorSpan blueSpan = new ForegroundColorSpan(Color.BLUE); ForegroundColorSpan greenSpan = new ForegroundColorSpan(Color.GREEN); ForegroundColorSpan yellowSpan = 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:
textView.setTextAppearance(mContext, R.style.labels);
(8)长按复制,api>11
android:textIsSelectable="true"
6.EditText相关:
1.设置默认提示:
android:hint="请输入姓名" android:textColorHint="#ff00ff00"
android:background="@null"去掉输入框
2.取消焦点和请求焦点方法
//取消焦点 mEt_login_name.setFocusable(false);
//请求焦点 mEt_login_name.setFocusableInTouchMode(true); mEt_login_name.setFocusable(true); mEt_login_name.requestFocus();
3.监听编辑框字数
// 字数变化 mEt_content.addTextChangedListener(this); onTextChanged(mEt_content.getText(), 0, mEt_content.length(), 0);
/** * ******************监听编辑框输入字数********************************** */ @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, 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.监听编辑框输入回车键
mEt_jianhuo.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { 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
<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" />
<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" />
本文出自 “天空没有痕迹但我飞过” 博客,转载请与作者联系!