1 基本UI
Zealer、CSDN、github
StormZhang、
张弘扬(Hyman):http://blog.csdn.net/lmj623565791?viewmode=contents
、任玉刚:http://blog.csdn.net/singwhatiwanna/article/details/38426471
、徐宜生
Android官方文档(最好的)
Android中文API:http://www.android-doc.com/
Android的开发者网站:http://developer.android.com/index.html
Android参考书
第一行代码、Android疯狂讲义
推荐有经验的人看的书:和源码有关的,设计模式,Thinking InJava(Java编程思想)
www.javaapk.com
Android的SDK中定义了一个View类,它是所有Android控件和容器的父类。《View和ViewGroup》。
View和ViewGroup的概念
View:Android中所有控件的顶层基类
ViewGroup:是View的子类,代表一个View的容器,可以用于存放其他View对象
布局类(就是ViewGroup类的子类)
不同的布局管理内部空间的方式不一样,在这里我们先简单认识一个布局,就是线性布局
线性布局(LinearLayout):是按照线性排列(横向、纵向)的方式对内部控件的位置进行管理
常用属性:android:orientation="vertical"[ horizontal]
View类的常用属性:
【
android:id设置控件的标识符号
android:layout_width设置子组件的布局宽度
android:layout_height设置子组件的布局高度
android:background设置控件的背景色
android:onClick设置控件的单击事件绑定监听器
android:visibility设置控件是否可见(invisible/visible/gone<不可见,不占位>
tv_name.setVisibility(View.VISIBLE);)
android:alpha设置控件透明度(0-1之间的数值)
android:padding设置子组件的内边距
android:layout_margin设置子组件的外边距
android:onClick为控件设置点击事件对应的回调方法
】
android:layout_width
android:layout_height
属性值:1)具体的长度 2)wap_content, 包裹内容(根据内容的大小调整控件的大小) 3)fill_parent:填充父控件(从Android2.1开始被match_parent替代) 4)match_parent:填充父控件
PS:以上两个属性是任何一个控件都必须要设置的,并且长度单位推荐使用:dp常用的基本控件:
TextView:基本文本标签,用于展示一个简单文本
常用属性:
android:text:文本的内容
android:textSize:文字的大小
android:textColor:文本的颜色《#RGB
#ARGB
#RRGGBB
#AARRGGBB
android:textColor="@android:color/holo_green_light"
》 android:gravity:控制控件内容的位置
android:drawableXXX:在控件中放置图片
android:autoLink:设置超链接
需要了解的属性:
【
android:shadowDx -------阴影的横坐标偏移
android:shadowDy-------阴影的纵坐标偏移
android:shadowRadius--------阴影的半径
android:shadowColor---------阴影的颜色
android:textAllCaps-------所有字母大写
android:password ------------将文字设置为密文
】
代码操作法:
【
//在代码中修改TextView的文本内容
//根据id在当前的页面中寻找控件
tv_name = (TextView)this.findViewById(R.id.tv_name);
//设置文本的内容,大多数情况下,一个控件在布局中设置的属性都有对应的方法可以在代码中去设置
tv_name.setText("修改了,文件的文本!");
// tv_name.setTextColor(Color.BLUE);
tv_name.setTextColor(Color.parseColor("#FF0000"));
tv_name.setTextSize(30);
】
需要设置以下属性:
1) android:singleLine="true"
2) android:ellipsize="marquee" //跑马灯效果
3) android:focusable="true" //让控件可获取焦点
4) android:focusableInTouchMode="true" // 让控件在触摸模式下获取焦点
5) 可选的属性:android:marqueeRepeatLimit//文本滚动的次数
属性值:-1或marquee_forever,代表无限滚动
具体的滚动次数(比如设置为2)
使用跑马灯的前提:1)文本内容必须要超出控件的宽度 2)必须单行显示
android:singleLine="true"
android:maxEms="8"
android:ellipsize="end"
android:singleLine="true"
android:ellipsize="end"
android:ems="15"
设置TextView的行间距、行高。
【
1、android:lineSpacingExtra
设置行间距,如”8dp”。
2、android:lineSpacingMultiplier
设置行间距的倍数,如”1.5″。
】
设置每行的最大字数
【
maxLength和固定15个字的宽度或代码控制加\n
android:singleLine="false".
android:maxEms
setText(Html.fromHtml()
关于文本颜色的操作代码设置:
private voidsetText(TextView t){
String text =t.getText().toString().trim();
SpannableStringspan =newSpannableString(text);
span.setSpan(newForegroundColorSpan(Color.WHITE),0,1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
t.setText(span);
}
tv_lingqu_tishi.setTextColor(Color.parseColor("#ffffff"));
】
继承自TextView,具有TextView的所有属性
【
注册监听事件的四种方式:
1、 设置 android:onClick 属性
《android:onClick="onBtnClick"
// 当按钮被点击的时候调用的方法
publicvoid onBtnClick(View v) {
System.out.println("使用onClick属性");
Toast.makeText(MainActivity.this,"使用onClick属性", 1).show();
}
》
2、 成员内部类
《//方式二:使用成员内部类
privateclass MyListener implements OnClickListener{
@Override
publicvoid onClick(View v) {
//TODO Auto-generated method stub
System.out.println("方式二:使用成员内部类");
Toast.makeText(MainActivity.this,"方式二:使用成员内部类", 1).show();
}
}
button2.setOnClickListener(newMyListener());
》
3、 匿名内部类
//方式三:使用匿名内部类
button3= (Button) this.findViewById(R.id.button3);
button3.setOnClickListener(newView.OnClickListener() {
@Override
publicvoid onClick(View v) {
System.out.println("方式三:使用匿名内部类");
Toast.makeText(MainActivity.this,"方式三:使用匿名内部类", 1).show();
}
});
4、 当前Activity实现监听接口(OnClickListener)
《public class MainActivity extends Activity implementsOnClickListener {
//方式四:实现监听接口
@Override
publicvoid onClick(View v) {
//TODO Auto-generated method stub
switch(v.getId()) {
caseR.id.button4:
System.out.println("方式四:实现监听接口1");
Toast.makeText(MainActivity.this,"方式四:实现监听接口1", 1).show();
break;
caseR.id.button5:
System.out.println("方式四:实现监听接口2");
Toast.makeText(MainActivity.this,"方式四:实现监听接口2", 1).show();
break;
default:
break;
}
}
}》
】
【ems
--EditText类继承自TextView类,具有TextView的所有属性
--EditText与TextView最大的不同就是用户可以对EditText控件进行编辑,同时还可以为EditText控件设置监听器,用来判断用户的输入是否合法
android:hint输入提示
android:textColorHint提示的颜色
android:textColorHighlight选中字体的背景颜色
android:inputType输入类型的可选项
监听输入框中文本内容的变化:addTextChangedListener(TextWatcher watcher)
】
《//监听EditText中文本变化
name.addTextChangedListener(newMyWather());
//监听EditText中文本变化
classMyWather implements TextWatcher{
@Override
publicvoid onTextChanged(CharSequence s,int start, int before,
int count) {
//TODO Auto-generated method stub
System.out.println("文本发生改变....."+s);
}
}
》
if(TextUtils.isEmpty(namea) || TextUtils.isEmpty(pwd))
【
继承自CompoundButton(带选择状态的按钮)
CheckBox继承于Button,所以具有普通按钮的各种属性,但是与普通按钮不同的是,CheckBox 提供了可选中的功能。
《
private class MyListener implements OnCheckedChangeListener{
@Override
publicvoid onCheckedChanged(CompoundButton buttonView,
booleanisChecked) {
switch(buttonView.getId()) {
caseR.id.cbox_color:
if(isChecked){
tv.setTextColor(Color.RED);
}else{
tv.setTextColor(Color.BLACK);
}
break;
}
}
cbox_color.setOnCheckedChangeListener(newMyListener());
》
】
练习
【
publicclass MainActivity extends Activity implements OnCheckedChangeListener {
private TextView show_text;
private CheckBox cb1, cb2, cb3, cb_all;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
initListener();
}
private void initListener() {
cb1.setOnCheckedChangeListener(this);
cb2.setOnCheckedChangeListener(this);
cb3.setOnCheckedChangeListener(this);
//为了避免选中状态处理的冲突,我们只需要考虑点击“全选”按钮时的业务逻辑
cb_all.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
boolean checked = cb_all.isChecked();
cb1.setChecked(checked);
cb2.setChecked(checked);
cb3.setChecked(checked);
}
});
}
private void findViews() {
show_text = (TextView)this.findViewById(R.id.show_text);
cb1 = (CheckBox)this.findViewById(R.id.cb1);
cb2 = (CheckBox)this.findViewById(R.id.cb2);
cb3 = (CheckBox)this.findViewById(R.id.cb3);
cb_all = (CheckBox)this.findViewById(R.id.cb_all);
}
@Override
public voidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//根据当前三个复选框的选中状态修改“全选/取消全选”的选中状态
if(cb1.isChecked()&&cb2.isChecked()&&cb3.isChecked()){
cb_all.setChecked(true);
}else{
cb_all.setChecked(false);
}
updateText();
}
private void updateText() {
//
show_text.setText("");
//逐个判断三个复选框的选中状态,显示被选中的
if(cb1.isChecked()){
// show_text.setText(cb1.getText()+"");
show_text.append(cb1.getText()+"");
}
if(cb2.isChecked()){
// show_text.setText(cb2.getText()+"");
show_text.append(cb2.getText()+" ");
}
if(cb3.isChecked()){
// show_text.setText(cb3.getText()+"");
show_text.append(cb3.getText()+"");
}
}
}
】
Activity与用户交互的界面
Service后台服务
BroadcastReceiver广播接收器
ContentProvider内容提供者(可以通过该组件实现不同进程间的数据交互)
1.8 RadioButton、RadioGroup 单选按钮(组)
【
==RadioButton继承于Button,所以具有普通按钮的各种属性,但是与普通按钮不同的是,在使用RadioButton的时候,要使用RadioGroup来包围起RadioButton
==RadioGroup是LinearLayout的子类,所以RadioGroup本质上是一个存放RadioButton的布局容器
==默认的LinearLayout布局的Orientation属性是水平的,而默认的RadioGroup的Orientation属性是垂直的
==RadioGroup类中的getCheckedRadioButtonId()根据id获得RadioGroup里指定的RadioButton
示例说明:
radio_group= (RadioGroup)this.findViewById(R.id.radio_group);
radio_group.setOnCheckedChangeListener(newOnCheckedChangeListener() {
/**
*当RadioGroup中的单选按钮被选择时调用的方法
*
*/
@Override
publicvoidonCheckedChanged(RadioGroup group,intcheckedId) {
switch(checkedId) {
caseR.id.ra_male://男
Toast.makeText(MainActivity.this,"你的选择是,男",0).show();
break;
caseR.id.ra_female://女
Toast.makeText(MainActivity.this,"你的选择是,女",0).show();
break;
default:
break;
}
}
});
switch(radio_group.getCheckedRadioButtonId()){
caseR.id.ra_male:
weiht= (in_height-80)*0.7;
break;
caseR.id.ra_female:
weiht= (in_height-70)*0.6;
break;
default:
break;
}
】
【
android:id="@+id/radio_data"
android:drawableTop="@drawable/slt_data"
android:text="DATA"
style="@style/radiobutton_style"/>
0dp
wrap_content
1
@null
@null
center
@color/select_text_color
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/radio_select"
android:clickable="false"
android:checked="true"/>
@Override
publicvoidonPageSelected(intpotion) {
//TODOAuto-generated method stub
//获取应该被选中的radiobutton对象,getChildAt方法:获取radiogroup中位于position位置的子控件对象
RadioButton rb =(RadioButton)rGroup.getChildAt(potion);
//设置让参数中指定的id对应RadioButton对象变为选中效果
rGroup.check(rb.getId());
}
】
【
继承自View
andorid:src设置图片来源
android:adjustViewBounds用于设置ImageView 是否调整自己的边界,来保持所显示图片的长宽比例
android:maxHeight设置 ImageView 的最大高度
《需要先设置android:adjustViewBounds为true,否则不起作用》
andorid:maxWidth设置 ImageView 的最大宽度
android:scaleType设置所显示的图片如何缩放或移动,以适应ImageView的大小。
setImageBitmap()设置Bitmap作为图片源
setImageDrawable()设置Drawable作为图片源
setImageResource()设置Resource作为图片源
《
//方式一:Drawable类描述的是资源文件中的图像资源
//Drawabledrawable = getResources().getDrawable(R.drawable.hjgh_n);
//iv.setImageDrawable(drawable);
//方式二:在Android中是用Bitmap类来描述图片
//通过BitmapFactory(位图工厂)生成Bitmap对象
/* Bitmap bm =BitmapFactory.decodeResource(getResources(),R.drawable.hjgh_n);
iv.setImageBitmap(bm);*/
//方式三:
iv.setImageResource(R.drawable.hjgh_n);
》
获取资源文件实现切换效果:
《
private int[] imgs ={R.drawable.lz1,R.drawable.lz2,R.drawable.lz3};
int index = 0;
public void xiaClick(View v){
if(index ==(imgs.length-1)) {
index=0;
}else{
index++;
}
imView.setImageResource(imgs[index]);
}
》
setImageDrawable(drawable);
setImageBitmap(bm);
setImageResource(resId);
怎么在代码中设ImageView的background属性
setBackgroundResource(R.drawable.down_finish);
// iv_startguid.setImageDrawable(getResources().getDrawable(R.drawable.btn_start_guide));
iv_startguid.setBackgroundResource(R.drawable.btn_start_guide);
】
1、先看是什么异常(首先找caused by)
3、自上而下查找第一行自己写的代码
2、再看异常的描述信息
1、资源文件命名错误:文件名只能包含小写字母、数字和下划线,并且不能以数字开头
2、资源文件夹命名错误:文件夹名只能用Android定义好的
1、应用程序包名出错(比如:包含中文)
2、误删除
设备断开连接(连接超时)