Android ApiDemos详解之App/Activity/Dialog(4)

本文关键字:代码  按钮  设置  点击  中的  图标  接下来  可能 


Android ApiDemos详解之App->Activity->Dialog

乍眼一看题目,大家可能都以为本例讲的是Dialog对话框的使用,其实如果大家点击Dialog并通过阅读上面的一小段英文就可以知道,这其实只是通过设置Activity的主题来让该Activity表现的像一个Dialog.

先看看给例子的功能吧,图说比较明了些:

Android ApiDemos详解之App/Activity/Dialog(4)

确实蛮像一个Dialog的,大段的英文描述的就是这是个Activity,只是看起来像个Dialog.

每点击点击左下角的”Add content”按钮一次,会增加一个小图标在中间,如:

Android ApiDemos详解之App/Activity/Dialog(4)

每点击右下角的”Removecontent”按钮一次,则从增加的小图标中减少一个,例如现在是三个,按一次,则变成两个,图就不发了大家明白就好。

接下来照旧我们先看看DialogActivity内的主要代码,如下:

 

public class DialogActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_LEFT_ICON);
        setContentView(R.layout.dialog_activity);
        getWindow().setTitle("This is just a test");
 
       getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,
                android.R.drawable.ic_dialog_alert);
 
        Button button =(Button)findViewById(R.id.add);
        button.setOnClickListener(mAddContentListener);
        button = (Button)findViewById(R.id.remove);
        button.setOnClickListener(mRemoveContentListener);
    }
 
    private OnClickListener mAddContentListener = new OnClickListener() {
        public void onClick(View v) {
            LinearLayout layout =(LinearLayout)findViewById(R.id.inner_content);
            ImageView iv = new ImageView(DialogActivity.this);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.icon48x48_1));
            iv.setPadding(4, 4, 4, 4);
            layout.addView(iv);
        }
    };
 
    private OnClickListener mRemoveContentListener = new OnClickListener() {
        public void onClick(View v) {
            LinearLayout layout =(LinearLayout)findViewById(R.id.inner_content);
            int num = layout.getChildCount();
            if (num > 0) {
                layout.removeViewAt(num-1);
            }
        }
    };
}

可能大家会有一个疑问那就是,没看到在代码中有什么设置主题让该Activity像Dialog啊,在哪里设置的呢?大家都知道每新建一个继承Activity的类都要在AndroidManifest.xml文件中进行注册,而该DialogActivity的在AndroidManifest.xml中的注册代码则如下所示:

<activity android:name=".app.DialogActivity"
                android:label="@string/activity_dialog"
                android:theme="@android:style/Theme.Holo.Dialog">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.SAMPLE_CODE"/>
            </intent-filter>
       </activity>


大家看到android:theme那一行代码的作用就是设置该Activity的主题为类似于Dialog,我们接着看代码:

getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,
                android.R.drawable.ic_dialog_alert);

这一句代码是用来设置Title左侧图标的,android.R.drawable.ic_dialog_alert是系统警告图标的id,样式就是一个三角形的警告图标。

代码中还有两个id为分别为add和remove的按钮,它们均注册了监听器。

其中id为add对应的监听器为:

private OnClickListener mAddContentListener = new OnClickListener(){
        public void onClick(View v) {
            LinearLayout layout =(LinearLayout)findViewById(R.id.inner_content);
            ImageView iv = new ImageView(DialogActivity.this);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.icon48x48_1));
            iv.setPadding(4, 4, 4, 4);
            layout.addView(iv);
        }
    };


意思很明显就是在代码中动态的加入一个ImageView在布局文件中id是inner_content的LinearLayout容器内,又因为在布局文件中LinearLayout的orientation属性设置的是horizontal,所以添加的图片按横向排列。

而id为remove对应的监听器为:

private OnClickListener mRemoveContentListener = new OnClickListener(){
        public void onClick(View v) {
            LinearLayout layout =(LinearLayout)findViewById(R.id.inner_content);
            int num = layout.getChildCount();
            if (num > 0) {
                layout.removeViewAt(num-1);
            }
        }
    };


和上述类似,则是在点击按钮后首先判断当前LinearLayout中的子元素数量是否大于1,如果是说明还有通过add按钮加入的ImageView,那么接下来就将其数量减1,并从LinearLayout中移走一个。



扩展:

Android多种View动画:EasyAndroidAnimations

Android多种View动画:EasyAndroidAnimationsEasyAndroidAnimations是Android的一个动画库,使用起来简单方便,EasyAndroidAnimations将一个Android View以各种形式的动画动起来。其中如图:EasyAndroidAnimations在github上的主页地址是:https://github.com/2359media/EasyAndroidAnimations......

Android PinnedSectionListView异常崩溃报错

Android PinnedSectionListView异常崩溃报错:java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParamsAndroid PinnedSectionListView是一个良好的第三方开源悬停分组ListView,其在github上的项目主页是:https://github.com/bew......

Android有趣的爆炸散落动画view:开源ExplosionField

Android有趣的爆炸散落动画view:开源ExplosionFieldgithub上有一个比较有趣的view动画开源项目ExplosionField,当点击该view时候,产生如图所示效果:犹如天女散花一样,爆炸散列,比较有趣。Android ExplosionField在github上的项目主页是:https://github.com/tyrantgit/ExplosionFieldAndroid ExplosionField使用简单,几乎可以针对任意的vi......

Android百分比布局:PercentRelativeLayout

Android百分比布局:PercentRelativeLayout在最新的Android support包中,增加了开发者期待的百分比布局PercentRelativeLayout和PercentFrameLayout,不过,Android官方是以support包的支持形式出现。使用百分比布局前,需要先导入在support支持包目录下名为“percent”的库,如图所示:将percent导入到Eclipse作为一个lib,然后就可以使用百分比布局PercentR......

Android通知Notification

一个小demo。点击 发送通知 按钮,则发送通知到设备的通知栏。点击 清除通知 则清除通知栏上的消息通知。package zhangphil.notification;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.app.Activity;import android.app.Notification;import android.app.Notifica......

Android Activity生命周期简明、详细介绍

这篇文章对Android的Activity生命周期做了详细、简洁的介绍,记下作为翻阅的资料。转载链接在这儿:http://blog.csdn.net/android_tutor/article/details/5772285......

Android LED数字/电子表字体digital font

Android LED数字/电子表字体digital font先看实现的字体样式:这种类型的字体样式会被一些UI设计用于Android APP中视频,或者广告的倒计时牌,比如常见的Android视频直播软件中右上角的广告倒计时。实现这种字体样式,先导入一个字体包:digital-7.ttf。这个digital-7.ttf文件,我已经上传,下载链接地址:http://download.csdn.net/download/zhangphil/9965392 拿到digital-7.ttf文......

Android Dialog使用、自定义带动画的Dialog使用

效果图普通Dialogprivate void showNormalDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.mipmap.ic_launcher) .setTitle("普通Dialog") .setMessage("这是一个普通的D......

Android中Application类的全面总结

本文出处: 炎之铠csdn博客:http://blog.csdn.net/totond 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处!前言  最近的开发中经常使用到Application类,它的用处很多,但是网上的资料有很多是旧的或者是介绍不全的,在这里全面总结一下,先介绍Application的所有方法,再介绍它的使用经验。 本文基于Android6.0源码,API LEVEL 23。介绍  首先看看官网的介绍:   下面是我对Applica......

Android显示框架:Activity应用视图的创建流程

Android显示框架:Activity应用视图的创建流程关于作者 郭孝星,非著名程序员,主要从事Android平台基础架构与中间件方面的工作,欢迎交流技术方面的问题,可以去我的Github提交Issue或者发邮件至guoxiaoxingse@163.com与我联系。第一次阅览本系列文章,请参见导读,更多文章请参见文章目录。文章目录一 创建Context对象二 创建Window对象三 创建View对象四 创建WindowState对象五 创建Surface对象Android应用在运行的过程中需......

Android ORMLite ForeignCollection关联外部集合

《Android ORMLite ForeignCollection关联外部集合》  Android ORMLite ForeignCollection关联外部集合的功能,适合层级比较深,数据模型互相渗透、交叉的数据结构或集合。尤其方便解决复杂数据模型。简单期间,我们暂时以 班级 <-> 学生 这样的数据模型为例加以说明。一个班级里面有若干学生(一对多,1<-n),反过来说,若干个学生集合到一个班级中(n->1)。 在A......

Android RuntimePermissions运行时权限:批量权限申请

Android RuntimePermissions运行时权限:批量权限申请绝大多数情况一个APP不可能只有单个权限,往往需要运行时批量申请n多个权限。比如在Androidmanifest里面写了两个权限:<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTE......

Android计时器TimerTask,Timer,Handler

Android计时器TimerTask,Timer,若要在TimerTask中更新主线程UI,鉴于Android编程模型不允许在非主线程中更新主线程UI,因此需要结合Android的Handler实现在Java的TimerTask中更新主线程UI。现给出一个简单示例。代码使用标准Java的TimerTask和Timer启动一个计时器Task。该任务每隔2秒更新主线程的UI(在主线程的TextView显示最新的系统时间:System.currentTimeMillis())。package zha......

Android Proximity Sensor近距离传感器P-Sensor

package zhangphil.sensor;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.support.v7.app.AppCompatActivi......

Android官方DataBinding(四):BindingAdapter

Android官方DataBinding(四):BindingAdapter简单初识BindingAdapter,写一个简单的例子,说明BindingAdapter的工作机制。简单期间,可以粗浅认为BindingAdapter实现了数据绑定中,对于某一个绑定值(被观察者)改变后,绑定一个方法,然后执行相应逻辑。(1)和附录1,2,3一样,毫无例外,先写一个数据模型User.java:package zhangphil.test;import android.databinding.BaseObs......

Android基础入门教程——2.2.2 RelativeLayout(相对布局)

Android基础入门教程——2.2.2 RelativeLayout(相对布局)标签(空格分隔): Android基础入门教程本节引言:在上一节中我们对LinearLayout进行了详细的解析,LinearLayout也是我们 用的比较多的一个布局,我们更多的时候更钟情于他的weight(权重)属性,等比例划分,对屏幕适配还是 帮助蛮大的;但是使用LinearLayout的时候也有一个问题,就是当界面比较复杂的时候,需要嵌套多层的 LinearLayout,这样就会降低UI Render的效率......

Android界面资料篇——RelativeLayout相对布局(转)

原帖地址:信我者永存的博客http://blog.sina.com.cn/rhp01719相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。下面是常用的一些属性RelativeLayout用到的一些重要的属性:第一类:属性值为true或falseandroid:layout_cente......

Android之RelativeLayout(相对布局)

RelativeLayout 相对布局相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。<?xml version="1.0" encoding="utf-8"?><!-- <LinearLayout xmlns:android="http://......

深入解析Android Design包——Behavior

上一篇深入解析AndroidDesign包——NestedScroll 已经说过了,在AndroidDesign包中主要有两个核心概念:一是NestedScroll,另一个就是Behavior。 相比于NestedScroll这个概念来说,Behavior分析起来会难很多,因为它几乎遍布了AndroidDesign包的每一个控件,种类繁多;另外Behavior提供了二十多个空方法给使用者来重写,主要分为四类: 1.与Touch事件相关的方法 2.与NestedScroll相关的方法 3.与控件依......

Android打开某个activity时自动弹出输入法键盘

最近在做一个可以让用户修改自己账户资料的activity,具体是打开后有一个EditText,然后用户可以在这里输入相关信息,但是做好后发现,进入这个activity时系统并没有自动弹出输入法键盘,于是上网搜索,发现一个很简单的方法,就是在manifest清单文件对应的activity配置中加入一句android:windowSoftInputMode="stateVisible|adjustResize"就可以了:<!-- 修改用户资料 --><activ......