【android studio学习】——Android常见界面控件

常用控件:

在这里插入图片描述

下列属性均指在xml文件中使用(Java中也可以设置:见文章底)

Textview(显示文本信息)
android:layout_width = " * "					设置文本控件的宽度
android:layout_height= " * "					高度
android:id										唯一标识
android:backgroud								背景
android:layout_margin							设置当前控件与屏幕边界或周围控件、布局的距离
android:padding									设置控件边界与控件内 内容的距离
android:text									设置文本
android:textColor								文字颜色
android:textSize								文字大小(推荐单位”sp“)
android:gravity									设置内容的位置
android:maxLength								设置文本最大长度,超过的那你内容不显示
android:lines									设置行数,超出不显示
android:maxLines								设置最大行数,超出不显示
android:ellipsize								设置当文本超出Textview规定范围的
					显示方式("start"[在文本开始处显示"..."],"middle"[中间],"end"[末尾])
android:drawableTop(Bottom/Left/Right)			文本顶部(下面,左,右)显示图片
										(图片推荐放在【res/drawable】)
android:lineSpacingExtra						设置行间距
android:textStyle								设置文本样式(”bold 粗体“,”italic 斜体 “,”normal 正常“)

Button(按钮)

Button 控件继承自TextView控件,既可以显示文本,也能显示图片,同时允许用户点击操作,被点击时背景会有动态切换效果。

Button控件设置点击事件
1.在布局文件中用onClick属性
<Button
			......
			android:onClick = " 改名字要与Java中的点击事件方法名一致 ">
2.使用匿名内部类

在Activity中编写

	btn.setOnClickListener(new View.OnClickListener(){
				@Override
				public void onClick(View view){
				//实现点击事件
 		}
	});
Activity实现OnClickListener接口
    public  class MainSctivity extends AppCompatActivity implements View.onClickListener{
        @Override
        protected void onCreate(Bundle saveInstanceState) {
            .......
            btn.setOnClickListener(this);
        }
        @Override
        public void onClick (View view) {
            //实现的代码
        }
    }

上述代码中,MainAcctivity通过实现View.OnClickListener接口中的onClick方法来设置点击事件,要注意的是在实现onClick方法之前,必须调用Butoon控件中的setOnClickListener()方法设置点击监听事件,否则点击不会生效
前两种方法适合按钮比较少的情况,如果按钮比较多建议用第三种。

EditText(编辑文本框)

它是TextView的子类

额外属性:
	android:hint								控件中内容为空时显示的提示问问信息
	android:textColor							空间内容为空时,提示文本信息的颜色
	android:password							输入文本框中的内容显示为” . “
	android:phoneNumber							设置输入文本框中的内容只能为数字
	android:minLines							设置文本最小行数
	android:scrollHorizontally					设置文本信息超出控件范围的情况下,是否出现横拉条
	android:editable							是否可编辑
ImageView(图片)

继承自View

属性:
		android:layout_width = " * "					设置文本控件的宽度
		android:layout_height= " * "					高度
		android:id										唯一标识
		android:backgroud								背景
		android:layout_margin							设置当前控件与屏幕边界或周围控件、布局的距离
		android:src										图片路径
		android:scaleType								将图片资源缩放或移动,以适应控件宽高
		android:tint									将图片渲染成指定的颜色
RadioButton(单选按钮)

RadioButton单选按钮,他是Button的子类。每个按钮都有“选中”,“未选中”两种状态,通过android:checked属性指定true/false。
RadioGroup是单选组合框,经常与单选按钮一起使用,其中可以收纳多个单选按钮,在RadioGroup中不会出现多个单选按钮同时选中的情况。

<RadioGroup
		android: 属性名 =  " 属性值 " >
		<RadioButton
				android:属性名 = " 属性值 "
				..../>
<RadioGroup/>
public class MainActivity extends AppCompatActivity {
    //初始化控件
    private RadioGroup radioGroup;
    private TextView textView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        radioGroup=(RadioGroup) findViewById(R.id.rdg);
        textView=(TextView) findViewById(R.id.tv);

        //利用setOnCheckedChangeListener()为RadioGroup设置监听
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                //判断点击的被点击的是哪个RadioButton
                if (checkedId==R.id.rbtn){
                    textView.setText("您的性别是:男");
                }else{
                    textView.setText("您的性别是女");
                }
            }
        });
    }
}
CheckBox(复选框)

CheckBox是Button的子类,可以实现多选功能。与单选框相同的属性决定选中和未选中状态。

public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
    
    private TextView hobby;
    private String hobbys;
    
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化多选控件
        CheckBox shuttlecock=(CheckBox)findViewById(R.id.like_shuttlecock);
        CheckBox basketball=(CheckBox)findViewById(R.id.like_basketball);
        CheckBox pingpong=(CheckBox)findViewById(R.id.like_pingpong);
        
        shuttlecock.setOnCheckedChangeListener(this);
        basketball.setOnCheckedChangeListener(this);
        pingpong.setOnCheckedChangeListener(this);
        //初始化文本显示控件
        hobby=(TextView)findViewById(R.id.hobby);
        hobbys=new String();
    }
    
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        String motion = buttonView.getText().toString();
        if (isChecked){
            if (!hobbys.contains(motion)){
                hobbys=hobbys+motion;
                hobby.setText(hobbys);
            }else {
                if (hobbys.contains(motion)){
                    hobbys=hobbys.replace(motion,"");
                    hobby.setText(hobbys);
                }
            }
        }
    }
}
AlerDialog(提示框)
1.AlerDialog概括

使用AlerDialog创建的对话框一般包含标题、内容、按钮三个区域。

步骤:
			(1)调用AlerDialog的静态内部类Builder创建AlerDialog.Builder的对象。
			(2)调用AlerDialog.Builder的setTitle()和setIcon()方法分别设置AlerDialog对话框的标题名称和图表。
			(3)调用AlerDialog.Builder的setMessage()、setSingleChoiceItems()或者setMultiChoiceItems()方法设置AlerDialog对话框的内容为简单文本、单选列表或者多选列表。
			(4)调用AlerDialog.Builder的setPositiveButton()和setNegetiveButton()方法设置AlerDialog对话框的确定和取消按钮。
			(5)调用AlerDialog.Builder的create()方法,创建AlerDialog对象。
			(6)调用AlerDialog对象的show()方法显示该对话框。
			(7)调用AlerDialog对象的dismiss()方法取消该对话框
2.单选提示框
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextView textView;
    private int[] textSizeArr={10,20,25,30,40};
    int textSize=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_main );
        //设置Button监听事件
        findViewById ( R.id.bt ).setOnClickListener ( this );
        textView =(TextView) findViewById ( R.id.tv );
    }

    @Override
    public void onClick(View v) {
        AlertDialog dialog;
        AlertDialog.Builder builder=new AlertDialog.Builder ( this )
                //设置标题
                .setTitle ( "设置字体大小" )
                //设置图标
                .setIcon ( R.mipmap.ic_launcher )
                //设置单选按钮
                .setSingleChoiceItems ( new String[]{"小号", "默认", "中号", "大号", "超大"}, textSize, new DialogInterface.OnClickListener () {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //把单选名称数组的下标给单选参数数组,使之名称和值一一对应。
                        textSize=which;
                    }
                } )
                //设置“确定”按钮
                .setPositiveButton ( "确定", new DialogInterface.OnClickListener () {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //为TextView设置在单选对话框中选择的字体大小
                        textView.setTextSize (textSizeArr[textSize]  );
                        //关闭对话框
                        dialog.dismiss ();
                    }
                } )
                //设置“取消”按钮
                .setNegativeButton ( "取消", new DialogInterface.OnClickListener () {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss ();
                    }
                } );
        dialog=builder.create ();
        dialog.show ();
    }
}
ListView(多条目,列表)
1.属性

ListView是一个比较常用的控件,他以列表的形式展示数据内容,并能够根据列表的高度自适应屏幕显示。

常用属性:
	android:listSelector			当条目被点击后,改变条目的背景颜色
	android:divider					设置分割线的颜色
	android:dividerHeight			设置分割线的高度
	android:scrollbars				是否显示滚动条
	android:fadingEdge				去掉上边和下边的黑色阴影
2.常用的数据适配器(Adapter)

在为ListView控件添加数据的时候会用到数据适配器。
数据适配器是数据与视图之间的桥梁,它类似于一个转换器,将复杂的数据转换为用户可以接受的方式进行呈现。

(1)BaseAdapter

BaseAdapter是基本的适配器。实际上是一个抽象类,通常在自定义适配器时会继承BaseAdapter,该类有四个抽象方法。

方法:
		public int getCount()
			获取Item条目的总数。
		public Object getItem(int position)
			根据position(位置)获取某个Item的对象。
		public long getItemId(int position)
			根据position获取某个Item的id。
		public View getView(int position,View convertView,ViewGroup parent)
			获取相应的position对应的Item视图,position是当前Item的位置,convertView用于复用旧视图,parent用于加载xml布局。
(2)SimpleAdapter

SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法并进行封装。因此在使用SimpleAdapter时,只需要在构造方法中传入相应的参数即可。

public SimpleAdapter ( Context context , List< ? extends Map<String , ? > > data , int resource , String[ ] from , int[ ] to )

context:表示上下文对象
data:数据集合,data中的每一项对应ListView控件中的条目的数据
resource:Item布局的资源id
from:Map集合中的key值
to:Item布局中对应的控件
(3)ArrayAdapter

ArrayAdapter也是BaseAdaper的子类,用法与SimpleAdapter类似,开发者只需要在构造方法里面传入相应的参数即可。
ArrayAdapter通常用于适配TextView控件,例如安卓手机里的设置菜单

构造方法:
	public ArrayAdapter(Context context,int resource);
	public ArrayAdapter(Context context,int resource,int textViewResourceId);
	public ArrayAdapter(Context context,int resource,T[ ] objects);
	public ArrayAdapter(Context context,int resource,int textViewResourceId,T[ ] objects);
	public ArrayAdapter(Context context,int resource,List<T> objects);
	public ArrayAdapter(Context context,int resource,int textViewResourceId,List<T> objects);
	
	List<T> objects:需要适配的List类型的数据
	textViewResourceId:Item布局中相应TextView的id
	T[ ] objects:需要适配的数组类型的数据
(4)添加适配器

通过ListView对象的setAdapter()方法添加。

例如:将继承BaseAdapter的MyBaseAdapter实例添加到ListView中:

	//初始化ListView控件
	ListView mListView=(ListView) findViewById(R.id.lv);
	//创建一个Adapter的实例
	MyBaseAdapter mAdapter = new MyBaseAdapter ( );
	//设置Adapter
	mListView.setAdapter( mAdapter);

简单的实验程序: activity_main.mxl

在这里插入图片描述

list_item.mxl

在这里插入图片描述
在这里插入图片描述

MainActivity.java

public class MainActivity extends Activity {


    private ListView mListView;
    //商品名称与价格数据集合
    private String[] titles ={"桌子","苹果","蛋糕","线衣","猕猴桃","围巾"};

    private String[] prices ={"1800元","10元/kg","300元","350元","10元/kg","280元"};
    //图片数据集合
    private  int[] icons={
      R.drawable.table,R.drawable.apple,R.drawable.cake,R.drawable.wireclothes,R.drawable.kiwifruit,
            R.drawable.scarf
    };

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_main );
        //初始化ListView控件
        mListView=(ListView) findViewById ( R.id.lv );
        //创建一个Adapte实例,适配器
        MyBaseAdapter mAdapter=new MyBaseAdapter();
        //为listview设置Adapter(适配器)
        mListView.setAdapter ( mAdapter );
    }

    
    //适配器的功能实现
    class MyBaseAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            //获取item的总数
            //返回ListView Item条目总数
            return titles.length;
        }

        @Override
        public Object getItem(int position) {
            //返回Item的数据对现象
            return titles[position];
        }

        @Override
        public long getItemId(int position) {
            //返回Item的id
            return position;
        }

        //得到Item的View视图
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //加载list_item.mxl布局文件 
            View view=View.inflate ( MainActivity.this,R.layout.list_item,null );
            TextView title=(TextView)view.findViewById ( R.id.title );
            TextView price=(TextView) view.findViewById ( R.id.price );
            ImageView iv=(ImageView) view.findViewById ( R.id.iv );
            title.setText ( titles[position] );
            price.setText ( prices[position] );
            iv.setBackgroundResource (icons[position]  );
            return view;
        }
    }
}

ListView加载数据优化以后更新说明。

RecyclerView(ListView加强版)

RecyclerView控件与ListView类似,但是RecyclerView的功能更加强大。

(1)展示效果

RecyclerView控件可以通过LayoutManager类实现横向或竖向的列表效果、瀑布效果和GridView效果。ListView只能实现竖向。

(2)适配器

RecyclerView控件使用的是RecyclerView.Adapter适配器,该适配器将BaseAdapter中的getView()方法拆分为onCreateViewHolder()方法和onBindViewHolder()方法,强制使用ViewHolder类,使代码规范化,避免了初学者写的代码性能不佳。

(3)复用效果

RecyclerView控件复用Item对象的工作由该控件自己实现,而ListView控件复用Item对象的工作需要开发者通过convertView的setTag()和getTag()方法进行操作。

(4)动画效果

RecyclerView控件可以通过setItemAnimator()方法为Item添加动画效果。

实例: activity_main.mxl

在这里插入图片描述

recycler_item.xml

在这里插入图片描述
在这里插入图片描述

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private HomeAdapter mAdapter;
    private String[] names = {"小猫","哈士奇","小黄鸭","小鹿","老虎"};
    private int[] icons = {
            R.drawable.apple,R.drawable.apple,R.drawable.apple,R.drawable.apple,R.drawable.apple
    };
    private String[] introduces = {
            "猫**************************************************",
            "哈士奇**********************************************",
            "鸭子************************************************",
            "小鹿************************************************",
            "老虎************************************************"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_main );

        mRecyclerView=(RecyclerView) findViewById ( R.id.id_recyclerview );
        mRecyclerView.setLayoutManager ( new LinearLayoutManager ( this ) );
        mAdapter=new HomeAdapter ();
        mRecyclerView.setAdapter ( mAdapter );
    }
    class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
        @Override
        public MyViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
            MyViewHolder holder = new MyViewHolder (
                    LayoutInflater.from( MainActivity.this ).inflate ( R.layout.recycler_item,parent,false )
            );
            return holder;
        }

        @Override
        public void onBindViewHolder( MyViewHolder holder, int position) {
            holder.name.setText(names[position]);
            holder.iv.setImageResource ( icons[position] );
            holder.introduce.setText ( introduces[position] );

        }

        @Override
        public int getItemCount() {
            return names.length;
        }

        class MyViewHolder extends RecyclerView.ViewHolder{
            TextView name;
            ImageView iv;
            TextView introduce;

            public MyViewHolder( View view) {
                super ( view );
                name =(TextView) view.findViewById ( R.id.name );
                iv=(ImageView) view.findViewById ( R.id.iv );
                introduce=(TextView) view.findViewById ( R.id.introduce );
            }
        }

    }
}
(5)添加recyclerview库

之后更新会说明。

自定义View

自定义View常用方法

(1)onMeasure()方法

该方法用于测量尺寸,在该控件下可以设置控件或者子控件的宽高。

onMeasure(int widthMeasureSpec,int heightwidthMeasureSpec)

widthMeasureSpec和 heightwidthMeasureSpec表示获取父容器指定该控件的宽度和高度。
widthMeasureSpec和 heightwidthMeasureSpec参数不仅包含父容器指定的属性值,还包括父容器指定的测量模式:

三种模式: EXACTLY:定义宽高时用具体的数值时使用。精确值
AT_MOST:宽高为“wrap_content”时使用。容量最大空间值 UNSPECIFIED:当父容器没有指定自定义控件宽高时使用。

注意:虽然widthMeasureSpec和 heightwidthMeasureSpec是父容器指定该控件的宽高,但是该控件还需要通过setMeasureDimension(int,int)方法设置具体宽高。

(2)onDraw()方法

该方法用于绘画图像:

onDraw(Canvas canvas)

canvas表示画布,该类经常与Paint类(笔)配合使用
(3)onLayout()方法

用于指定布局中子控件的位置,该方法通常在ViewGroup中重写

onLayout(boolean changed,int left,int top,int right,int bottom)

changed表示自定义View的大小和位置是否发生变化,其余四个都是与父容器四个边的距离

Java编写:

用控件名定义,属性用set赋值 例如:

TextView textView=new TextView ( this );
    textView.setTextViewColor( )
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值