Android对话框

在一个例子中展示四种对话框。

设置四个按钮

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/bt_dialog1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="普通对话框" />

    <Button
        android:id="@+id/bt_dialog2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="单选对话框" />

    <Button
        android:id="@+id/bt_dialog3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="多选对话框" />

    <Button
        android:id="@+id/bt_dialog4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="进度条对话框" />

</LinearLayout>

分别是普通对话框、单选对话框、多选对话框、进度条对话框

package com.example.stylethemetest;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Context mContext;

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

        Button btDialog1 = (Button) findViewById(R.id.bt_dialog1);
        Button btDialog2 = (Button) findViewById(R.id.bt_dialog2);
        Button btDialog3 = (Button) findViewById(R.id.bt_dialog3);
        Button btDialog4 = (Button) findViewById(R.id.bt_dialog4);

        btDialog1.setOnClickListener(this);
        btDialog2.setOnClickListener(this);
        btDialog3.setOnClickListener(this);
        btDialog4.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            // 1. 普通对话框
            case R.id.bt_dialog1:
                AlertDialog.Builder alertDialog1 = new AlertDialog.Builder(mContext);

                alertDialog1.setTitle("注意");
                alertDialog1.setMessage("真的要删除吗?");
                alertDialog1.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(mContext, "你点击了确定", Toast.LENGTH_SHORT).show();
                    }
                });
                alertDialog1.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(mContext, "你点击了取消", Toast.LENGTH_SHORT).show();
                    }
                });
                alertDialog1.show();
                break;
            // 2. 单选对话框
            case R.id.bt_dialog2:
                final AlertDialog.Builder alertDialog2 = new AlertDialog.Builder(mContext);

                alertDialog2.setTitle("选择学历");
                final String[] edu = {"小学", "初中", "高中", "本科", "研究生", "博士", "其他"};
                // 选择默认选中,-1表示不选中
                alertDialog2.setSingleChoiceItems(edu, -1, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String eduLevel = edu[which];
                        Toast.makeText(mContext, eduLevel+which, Toast.LENGTH_SHORT).show();
                    }
                });
                alertDialog2.setPositiveButton("选择", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO:处理确定逻辑
                    }
                });
                alertDialog2.show();
                break;
            // 3. 多选对话框
            case R.id.bt_dialog3:
                AlertDialog.Builder alertDialog3 = new AlertDialog.Builder(mContext);
                alertDialog3.setTitle("选择你喜欢吃的水果");
                final String[] items = {"榴莲", "苹果", "葡萄", "香蕉", "黄瓜", "火龙果", "荔枝"};
                // bool值和上面的条目对应,true表示默认选中
                final boolean[] checkedItems = {false, true, false, true, false,
                        false, false};
                alertDialog3.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        // 下标和是否被选中
                        Toast.makeText(mContext, which+ " " +isChecked, Toast.LENGTH_SHORT).show();
                    }
                });
                alertDialog3.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        StringBuilder fruits = new StringBuilder();
                        for (int i = 0; i < items.length; i++) {
                            if (checkedItems[i]) {
                                // 就证明是选中的
                                String fruit = items[i];
                                fruits.append(fruit).append(" ");
                            }
                        }
                        Toast.makeText(mContext, fruits, Toast.LENGTH_SHORT).show();
                    }
                });
                // show里面调用了create
                alertDialog3.show();
                break;
            // 4. 进度条对话框
            case R.id.bt_dialog4:
                final ProgressDialog progressDialog = new ProgressDialog(mContext);
                // 默认STYLE_SPINNER,小圆圈选装。可选水平进度条
                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                progressDialog.setTitle("加载");
                progressDialog.setMessage("Loading...");
                // false表示用户可不能通过按下back键或者对话框外的地方退出,默认是true。
                progressDialog.setCancelable(true);
                progressDialog.show();
                // 进入条相关组件可以在子线程更新UI
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for (int i = 0; i < 101; i++) {
                        // 与Thread.sleep不同的是,他不会抛出interruptedException;
                            SystemClock.sleep(50);
                            progressDialog.setProgress(i);
                        }
                        // cancel也调用了dismiss,不过还可可响应setOnCancelListener
                        // hide只是隐藏,没有dismiss掉
                        progressDialog.dismiss();
                    }
                }).start();

                break;
        }
    }
}
 

上图是普通对话框

上图是单选对话框

上图是多选对话框

上图是进度条对话框

Android帧动画初步认识

其实就是加载一系列的图片资源

  1. 首先放入一系列图片放入res/drawable中,我放入了drawable-xxhdpi。
  2. 在上述文件夹下新建一个xml,如下。 android:oneshot="false"表示循环一次后还接着循环。true的话就是循环一次停止在最后一帧。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    <item android:drawable="@drawable/a" android:duration="500" />
    <item android:drawable="@drawable/b" android:duration="500" />
    <item android:drawable="@drawable/c" android:duration="500" />
    <item android:drawable="@drawable/d" android:duration="500" />
    <item android:drawable="@drawable/e" android:duration="500" />
</animation-list>

主界面就放一个ImageView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.animationtest.MainActivity">

    <ImageView
        android:id="@+id/iv_animation"
        android:layout_width="100dp"
        android:layout_height="100dp" />

</LinearLayout>
 

MainActivity

package com.example.animationtest;

import android.graphics.drawable.AnimationDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

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

        rocketImage = (ImageView) findViewById(R.id.iv_animation);
        // [1]找到ImageView控件 用来显示动画效果
        rocketImage = (ImageView) findViewById(R.id.iv_animation);
        // [2]设置背景资源, 传入的是xml
        rocketImage.setBackgroundResource(R.drawable.my_animation);
        // [3]获取AnimationDrawable 类型
        AnimationDrawable ad = (AnimationDrawable) rocketImage.getBackground();
        // [4]开始执行动画
        ad.start();
    }
}
 

结果如下图片所示,其实是动态的。截图成静态了。


by @sunhaiyu

2017.5.18

Android对话框和帧动画的更多相关文章

  1. Android简单逐帧动画Frame的实现(三)

    android之动画(三)通过AnimationDrawable控制逐帧动画     android与逐帧动画: 效果图: 当我们点击按钮时,该图片会不停的旋转,当再次点击按钮时,会停止在当前的状态. ...

  2. Android简单逐帧动画Frame的实现(二)

    Android简单逐帧动画Frame的实现   Android简单逐帧动画Frame的实现 1.逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影. 2.实现步骤: 1. 在工程里 ...

  3. Java乔晓松-android中的帧动画FrameByFrame

    先看效果后上代码: 动画开始---- 动画切换的界面---- 动画播放完毕后的跳转界面----- 重要的方法: imageView.setBackgroundResource(R.anim.frame ...

  4. Android--逐帧动画FrameAnimation

    前言 开门见山,本篇博客讲解一下如何在Android平台下播放一个逐帧动画.逐帧动画在Android下可以通过代码和XML文件两种方式定义,本篇博客都将讲到,最后将以一个简单的Demo来演示两种方式定 ...

  5. Android基础笔记(十)- 帧动画、补间动画具体解释、对话框

    帧动画 补间动画Tween Animation 对话框以及面试中的注意点 帧动画 帧动画非常easy,我们首先看一下Google官方解释This is a traditional animation ...

  6. Android动画效果之Frame Animation(逐帧动画)

    前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...

  7. android 帧动画,补间动画,属性动画的简单总结

      帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建ani ...

  8. android 帧动画

    首先在res/drawable/name1.xml/定义一组图片集合: <?xml version="1.0" encoding="utf-8"?> ...

  9. android帧动画,移动位置,缩放,改变透明度等动画讲解

    1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...

随机推荐

  1. HDU 4944 FSF’s game(2014 Multi-University Training Contest 7)

    思路:  ans[n]=  ans[n-1] + { (n,1),(n,2).....(n,n)}  现在任务 是 计算  { (n,1),(n,2).....(n,n)}(k=n的任意因子) 很明显 ...

  2. javascript中对象的深度克隆

    记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...

  3. Nginx开发从入门到精通 学习目录分享学习 (阿里著作)

    Nginx开发从入门到精通   缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部 ...

  4. 【转载】Ubuntu下SVN安装和配置

    一.SVN安装 1.安装包 1.$ sudo apt-get install subversion 2.创建项目目录 $ sudo mkdir /home/xiaozhe/svn $ cd /home ...

  5. 菜鸟学SSH(十五)——简单模拟Hibernate实现原理

    之前写了Spring的实现原理,今天我们接着聊聊Hibernate的实现原理,这篇文章只是简单的模拟一下Hibernate的原理,主要是模拟了一下Hibernate的Session类.好了,废话不多说 ...

  6. python知识点 2014-07-09

    迭代协议: 类实现方法__next__,则可以使用for.while来实现迭代 使用iter或者next实现手工迭代: L = [1,2,3] I = iter(L) print(I.next()) ...

  7. Android ListView点击失效

    item中存在 ImageButton 等可以点击的组件,这会抢先获得ListView的焦点. 从而导致item点击失效

  8. UIApplication 和 Appdelegate-----iOS

    正文 一 UIApplication 1.一个UIApplication代表是一个应用程序,而且是单例的.一个程序也只能有一个UIApplication对象 2.获取UIApplication对象: ...

  9. session存入redis

    Session信息入Redis Session简介 session,中文经常翻译为会话,其本来的含义是 指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一 ...

  10. Python不支持函数重载

    函数重载与Python: 函数重载的好处就是不用为了不同的参数类型或参数个数,而写多个函数.多个函数用同一个名字,但参数表,即参数的个数和数据类型可以不同.调用的时候,虽然方法名字相同,但根据参数表可 ...