Android常用控件,用线程写一个进度条。

一、事件监听(三种写法)

1、标签上直接绑定监听方法
      public void xxx(View view)

2、 创建监听器对象,组件再绑定监听器对象
2.1、匿名内部类

2.2、使用匿名内部类并定义成全局的属性

二、文本框(TextView)

1、TextView直接继承View,作用就是在界面上显示文本(类似于Swing中的JLabel),同时它还是EditText、Button两个UI组件类的父类。另外Android关闭了它的文字编辑功能,如果想编辑内容,则可以使用EditText。

2、常用属性

①、text

②、 autoLink

③、 singleLine(已过时,现在应为:android:lines)

④、 lines

⑤、 minLines

⑥、 textColor

⑦、 textSize

⑧、 textStyle :字体风格粗体、斜体

⑨、 backgroud :设置背景,可以是颜色或图片

⑩、 drawableXX 设置文本的icon

⑪、 ellipsize 当文字长度超过textview宽度时的显示方式 
         android:ellipsize="start"      省略号显示在开头 "...pedia"
         android:ellipsize="end"        省略号显示在结尾  "encyc..."
         android:ellipsize="middle"     省略号显示在中间 "en...dia"
         android:ellipsize="marquee"    以横向滚动方式显示(另外还需要设置其它三个属性,否则不滚动,即必须让该控件获得焦点)


3、编辑框(EdiText)

(1)、EditText和TextView非常相似,它与TextView共用了绝大总分XML属性和文法,
      二者最大区别在于:EditText可以接受用户输入。

(2)、常用属性:

①、inputType:它是EditText组件最重要的属性,它相当于HTML中<input>标签的type属性,用于EditText指定输入组件的类型。
       常用取值有:number|numberPassword|date|phone

②、hint:提示字符信息

三、Toast(吐丝框)

1、Toast是Android中的一种简易的消息提示框(注意使用网格布局:LinearLayout)

在activity_main.xml里面配布局,如下:


<Button
        android:layout_width="match_parent"
        android:onClick="studyToast"
        android:text="点击弹出框"
        android:layout_height="wrap_content" />

2、使用这个类的最简单的方法是调用静态方法构造您所需要的一切,并返回一个新的Toast对象。
Toast toast=Toast.makeText(getApplicationContext(), "默认的Toast", Toast.LENGTH_SHORT);
toast.show(); 
第一个参数:当前的上下文环境。可用getApplicationContext()或this 
第二个参数:要显示的字符串。也可是R.string中字符串ID 
第三个参数:显示的时间长短。Toast默认的有两个LENGTH_LONG(长)和LENGTH_SHORT(短),也可以使用毫秒如2000ms 

public void studyToast(View view) {
        Toast.makeText(this, "你好,Toast", Toast.LENGTH_SHORT).show();
}

四、ImageView

1、注意事项:res下面的资源名不能使用大写字母,特别是图片资源中的图片的文件名,会造成R.java文件丢失,改正确后即可
例如:smallImage.png错误,small_image.png正确

2、scaleType(缩放类型)

(1)、scaleType的属性值有:matrix   fitXY  fitStart   fitCenter  fitEnd  center   centerCrop  centerInside 

①、matrix 用矩阵来绘制(从左上角起始的矩阵区域)
②、fitXY  不按比例缩放图片,目标是把整个图片塞满整个View
③、fitStart  把图片按比例扩大或缩小到View的[[[宽度]]],然后置顶部显示(图片会完整显示)
④fitCenter  把图片按比例扩大或缩小到View的[[[宽度]]],然后居中显示(图片会完整显示)
⑤、fitEnd   把图片按比例扩大或缩小到View的[[[宽度]]],然后置底部显示(图片会完整显示)
⑥、center  不缩放,将图片按原来大小居中显示,当图片宽高超过View的宽高时,则截取图片的居中部分显示
⑦、centerCrop  按比例扩大(或缩小)图片的size居中显示,使得图片的长宽的[[[等于或大于]]]View的长宽
⑧、centerInside  按比例扩大(或缩小)图片的size居中显示,使得图片的长宽的[[[等于或小于]]]View的长宽 (图片会完整显示) 

ps:用得最多还是fitXY fitStart fitCenter fitEnd,默认是fitCenter

2、 scaleType属性分二种情况分析

①、 图片比ImageView小(android08_widget03_d01_v1)

<ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginRight="10dp"
            android:background="#FF0000"
            android:scaleType="matrix"
            android:src="@drawable/small_image" />

②、图片比ImageView大(android08_widget03_d01_v2)

<ImageView
        android:layout_width="100dp"
        android:background="@color/colorAccent"
        android:src="@drawable/small_image"
        android:scaleType="matrix"
        android:layout_height="100dp" />

五、ProgressBar(进度条)

1、常用属性

//默认为圆形 
style="?android:attr/progressBarStyleHorizontal" 
//进度条的进度
android:progress="33"
//进度条最大值
android:max="100" 

2、线程休眠

①、Thread.sleep(100);//抛异常

②、SystemClock.sleep(100);//不抛异常

3、线程注意事项: 
不能在主线程中执行耗时的操作,只能在子线程中操作 
另外,在子线程中不能操作主线程中的控件(ProgressBar除外)

eg、SubThread->MainThread    错误

SubThread->Handler->MainThread 正确

4、用线程写一个进度条

 

      在activity_main_xml里的布局:

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <TextView
            android:id="@+id/tv_main_tv1"
            android:textColor="@color/red"
            android:textSize="80dp"
            android:layout_width="90dp"
            android:layout_height="match_parent" />
        <ProgressBar
            android:id="@+id/pb_main_pb1"
            android:layout_width="match_parent"
            style="?android:attr/progressBarStyleHorizontal"
            android:max="100"
            android:layout_height="60dp" />
</FrameLayout>


<Button
        android:id="@+id/btn_main_btn1"
        android:layout_width="match_parent"
        android:text="启动进度条"
        android:onClick="setProgressBar"
        android:layout_height="wrap_content" />

      MainActivity.java里面的方法

public class MainActivity extends AppCompatActivity {
    //初始化进度条 
    private ProgressBar pb_main_pb1;
    private int prosess;
    private TextView tv_main_tv1;
    private MyHandler myHandler = new MyHandler();
    private int code = 1;

    private class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(code == msg.what){
                prosess ++;
                pb_main_pb1.setProgress(prosess);
                tv_main_tv1.setText(prosess + "%");

            }
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pb_main_pb1 = this.findViewById(R.id.pb_main_pb1);
        tv_main_tv1 = this.findViewById(R.id.tv_main_tv1);
    }
    //启动进度条
    public void setProgressBar(View view) {
        //判断进度条为0时方可启动
        if(0==prosess){
            new MyThread().start();
        }
    }

    //编写子线程  进行具体操作
    public class MyThread extends Thread{
        @Override
        public void run() {
            super.run();
            while (true){
                //设置休眠时间
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //判断进度条的进度  如果执行完了 恢复原来的进度
                if(prosess == 100){
                    prosess = 0;
                    break;
                }
                //触发Handler  将子线程的请求通过Handler发送给主线程
                Message msg = new Message();
                //为了方便多个线程同时进行
                msg.what = 1;
                myHandler.sendMessage(msg);

            }
        }
    }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值