-
datapicker Timepicker查看全部
-
另外,那个“显示隐藏内容按钮”,点一次,出现“隐藏内容”,再点第二次,程序直接闪退。原因:对ViewStub的inflate操作只能进行一次,因为inflate的时候是将其指向的布局文件解析inflate并替换掉当前ViewStub本身(由此体现出了ViewStub“占位符”性质),一旦替换后,此时原来的布局文件中就没有ViewStub控件了,因此,如果多次对ViewStub进行infalte,会出现错误信息:ViewStub must have a non-null ViewGroup viewParent。查看全部
-
使用ViewStub惰性加载 作用:ViewStub标签同include标签一样可以用来引入一个外部布局,不同的是,ViewStub引入的布局默认不会扩张,既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存。 所以,可以人为地控制什么时候去加载ViewStub的内容。 ViewStub通常作为一种优化,只有触发某种事件的时候才会显示内容,才会去占用cpu和内存。 ---------------------- 这里我们通过使用按钮来实现ViewStub惰性加载。 1. 首先新建一个 common_text文件,只添加TextView控件。 2. 在 main.xml 文件中添加 Button 和 ViewStub,其中ViewStub添加属性android:layout="@layout/common_text",完成布局的添加。 3. 在 MainActiivity中创建和初始化Button和ViewStub。对Button添加监听器,监听点击事件。重写onclick()方法:在里面添加一句:viewStub.inflate();//令惰性加载ViewStub加载布局 ----------------- 不使用ViewStub也可以隐藏内容:比如说,TextView就有visibility属性,设置visibility="gone"就不会显示内容。可以设置个按钮监听器,当点击此按钮后,就修改visibility="visible"就能显示内容。 ---------------------- 摘自评论区: viewstub显示出来最好不要用inflate();最好用setVisibility(viewstub.VISIBLE)显示和用setVisibility(viewstub.GONE)隐藏,会少些麻烦。但是也有缺点,就是占用内存。查看全部
-
使用merge合并UI布局 作用:合并UI布局,使用该标签能降低UI布局的嵌套层次。 场景(1):布局根结点是FrameLayout且不需要设置background或者padding等属性,可以用merge代替; 场景(2):某布局作为子布局被其他布局include时,使用merge当作该布局的顶结点,这样在被引入时顶结点会自动被忽略。 关于第二点,比如说我们新建一个 common_progressbar.xml 文件,根布局是LinearLayout,里面设置ProgressBar和TextView.。本来LinearLayout采用的是垂直布局,ProgressBar和TextView不会叠加,但在 main.xml 文件中添加 FrameLayout子布局,并在里面使用 include 添加 common_progressbar.xml,并且修改common_progressbar.xml的根布局,用merge代替LinearLayout,结果就出现 ProgressBar和TextView 叠加的效果,说明被include进来的根布局被自动忽略了。 其实也同样证明了第一点。正因为是在FrameLayout里面使用了include,才能顺利地用merge代替LinearLayout。查看全部
-
本节编程步骤: 1. 创建相对布局 common_title.xml。同时修改 AndroidManifest.xml的application的主题样式属性,改做:android:theme="@android:style/Theme.Light.NoTitleBar" 2. 在 common_title.xml 中添加3个 TextView,TextViwe的属性分别设置为左对齐(layout_alignParentStart="true")、居中(layout_centerInParent="true")和右对齐(layout_alignParentEnd="true")。同时都设置为垂直居中(layout_centerVertical="true"),另外修改RelativeLayout的属性layout_height="wrap_content",这样就做好标题栏了。 3.在main.xml中添加<include>标签,把common_title.xml引入到这里: <include layout="@layout/common_title" /> 使用include,就相当于把common_title加入到main.xml,成为main.xml的一部分。所以可以在 MainActivity 中直接使用findViewById(R.id.XXX)找到common_title里面的控件。查看全部
-
Android常用的布局样式 1.LinearLayout(线性布局) 线性的 垂直的 水平的 2.RelativeLayout(相对布局) 最灵活的 3.TableLayout(表格布局) 现在被 GridView代替 4.AbsoluteLayout(绝对布局) 已淘汰 5.FrameLayout(帧布局) 布局叠加时使用 ---------------------------- Android布局原则 1.尽量多使用LinearLayout(线性布局)和RelativeLayout(相对布局),不要使用AbsoluteLayout(绝对布局) 2.在布局层次相同的情况下,建议使用LinearLayout代替RelativeLayout,因为这时LinearLayout的性能比RelativeLayout要好一些。 3.将可复用的组件抽取出来并通过include标签使用 4.使用ViewStub标签来加载一些不常用的布局 5.使用merge标签减少布局的嵌套层次。 灵活使用后面三条原则,将极大优化项目的布局。 ---------------------------------- < include />的使用 作用:将公用的组件抽取出来单独放到一个xml文件中,然后使用include标签导入公用布局。 效果:提高UI的制作和复用效率,也能保证制作的UI布局更加规整、可维护。查看全部
-
Android常用的布局样式 1.LinearLayout(线性布局) 线性的 垂直的 水平的 2.RelativeLayout(相对布局) 最灵活的 3.TableLayout(表格布局) 现在被 GridView代替 4.AbsoluteLayout(绝对布局) 已淘汰 5.FrameLayout(帧布局) 布局叠加时使用 现在基本使用线性布局和相对布局,特殊情况会使用帧布局(视频暂停、缓冲文件等)。查看全部
-
自定义SeekBar进度条 SeekBar类似之前学的ProgressBar,都可以改变进度条的样式,但SeekBar还能改变滑块的样式。 android:progressDrawable="@drawable/seekbar_img"(改变进度条的样式) android:thumb="@drawable/thumb"(改变滑块的样式) 自定义滑块样式的步骤: 1. 在 drawale文件夹中创建资源文件 normal.png、select.png 作为滑块的模型; 2. 在 drawale文件夹中创建选择器selector资源文件 my_thumb.xml,在selector中添加代码: <!--按压的情况下--> <item android:drawable="@drawable/select" android:state_pressed="true" android:state_window_focused="true"></item> <!--获取到焦点的情况下--> <item android:drawable="@drawable/select" android:state_focused="true" android:state_window_focused="true"></item> <!--被选中的情况下--> <item android:drawable="@drawable/select" android:state_selected="true" android:state_window_focused="true"></item> <!--无操作的情况下--> <item android:drawable="@drawable/normal"></item> 3. 在 main.xml 下的 SeekBar 添加属性: android:thumb="@drawable/my_thumb"。 ------------------------- 自定义进度条样式的步骤: 和前面学的 ProgressBar 完全一样。 添加完需要的资源文件后,在 SeekBar中添加属性:android:progressDrawable="@drawable/progress_bar"查看全部
-
使用SeekBar制作可拖动的进度条的步骤: 1. 在main.xml中添加标签 SeekBar 和两个 TextView用于显示状态。 2. 在MainActivity中创建并初始化SeekBsr和TextView. 3. 为了监听用户的手势,需要监听器,令 MainActivity 实现接口 OnSeekBarChangeListener,并重写3个方法: //数值改变的时候调用 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { textView1.setText("正在拖动"); textView2.setText("当前进度:"+progress); } //开始拖动的时候调用 @Override public void onStartTrackingTouch(SeekBar seekBar) { textView1.setText("开始拖动"); } //停止拖动的时候调用 @Override public void onStopTrackingTouch(SeekBar seekBar) { textView1.setText("停止拖动"); } 4. SeekBar加载监听器。查看全部
-
SeekBar介绍 听歌的时候,我们常常喜欢快进或者退回到某一时间段、喜欢控制音量大小。SeekBar可以通过滑块的位置来标识数值,而且拖动条允许用户拖动滑块来改变进度值的大小。 -------------------- SeekBar的主要属性和方法: 由于 SeekBar 是 PrograssBar 的子类,所以方法和属性也是类似的。 (1)setMax ——设置SeekBar的最大数值 (2)setProgress ——设置SeekBar当前的数值 (3)setSecondaryProgress——设置SeekBar的第二数值,即当前拖动条推荐的数值。 ----------------------- SeekBar的事件 由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现 SeekBar.OnSeekBarChangeListener接口。此接口共需要监听三个事件: 数值改变 onProgressChanged 开始拖动 onStartTrackingTouch 停止拖动 onStopTrackingTouch查看全部
-
无限轮播图片的实现: 1. 改写 ImageAdapter 适配器的 onCount()方法,使它返回整数最大值 Integer.MAX_VALUE。 2. 改写 getView():image.setBackgroundResource(res[position%res.length]); 由于数组res的下标的上限是 Integer.MAX_VALUE,所以 position%res.length 的运算结果是一个循环数组。这样就实现了循环播放图片。 --------------------------------------------- ImageSwitcher实现大图浏览的步骤: 1. 在 main.xml 中添加 ImageSwitcher标签。 2. 让 MainActivity 继承接口 ViewFactory。重写方法 makeView(): public View makeView() { ImageView image = new ImageView(this);//初始化ImageView对象 image.setScaleType(ImageView.ScaleType.FIT_CENTER);//保持宽高比例,并且居中显示 return image; } 重写 onItemSelected(),只写一句:imageSwitcher.setBackgroundResource(res[position%res.length]);//imageSwitch加载图片资源。 3. 在 MainActivity 中创建和初始化 ImageSwitcher 的对象。之后加载工厂:imageSwitcher.setFactory(this); 然后就是加载动画效果,比如:imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));//淡入的效果查看全部
-
ImageSwitcher 大图浏览 ImageSwitcher 和 ImageView 的功能有点类似,他们都可以用于显示图片,区别在于 ImageSwitcher 的效果更炫,它可以指定图片切换时的动画效果。 为了让 ImageSwitcher 加载图片,必须让MainActivity实现接口ViewFactory。 --------------------------------------- ViewFactory的使用 ImageSwitcher 粗略的理解就是 ImageView 的选择器,它需要设置 ViewFactory。一般情况下,我们让该 ViewFactory 的 makeView()方法返回 ImageView。 ----------------------------------- 为ImageSwitcher加入动画 imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));//淡入的效果 imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));//淡出的效果查看全部
-
自定义适配器的步骤 1. 创建一个新类 IamgeAdapter ,继承BaseAdapter。 2. 为了接收参数,需要构建有参的构造方法: private int[]res; //用于接收数据源 private Context context;//上下文信息,ImageView的初始化会用到 //构造有参构造方法 public ImageAdapter(int[]res,Context context){ this.res=res; this.context=context; } 3. 重写getView(),把图片ID(这里是res[position])转变为 ImageView,并返回 ImageView: public View getView(int position, View view, ViewGroup viewGroup) { ImageView image = new ImageView(context); image.setBackgroundResource(res[position]); //设置图片(ImageView)在Gallery中的缩略图的大小 image.setLayoutParams(new Gallery.LayoutParams(400,300));//宽是400,高是300 //设置缩放比例(scale)采取的类型 image.setScaleType(ImageView.ScaleType.FIT_XY);//横向X-Y轴的拉伸 return image; } 其他方法的重写,写法固定: public int getCount() { return res.length; } public Object getItem(int position) { return res[position]; } public long getItemId(int position) { return position; }查看全部
-
使用Gallery 和 ImageSwitcher 制作图片浏览器 Gallery介绍 我们有时候在手机上或者PC上看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据你的点击或者触摸来触发其他事件响应。同样的,在Android中也提供这种实现,这就是通过Gallery在UI上实现缩略图浏览器。 ------------------------- 谷歌已经将Gallery列为过期的控件,建议使用HorizonScrollView或者ViewPager。 ------------------------- 查看源码不难发现 ArrayAdapter 和 SimpleAdapter 都继承了 BaseAdapter。 所以,我们也可以自己定义一个适配器!自定义的好处是自由度、灵活性会更大。 BaseAdapter中的重要方法 (1)public int getCount()——返回一定义的数据源的总数量 (2)public Object getItem(int position) public long getItemId(int position) ——告诉适配器取得目前容器中的数据ID和对象 (3)public View getView(int position,View convertView,ViewGroupparent)——取得目前要显示的图像View,传入数组ID值使之读取与成像。 ----------------------------------- 使用 Gallery 浏览图片的步骤: 1. 在 main.xml 中添加 Gallery标签。 2. 在 MainActivity 中创建数据源,这里就是 int数组存放图片id。 3. 自定义适配器。创建一个新类 ImageAdapter ,继承 BaseAdapter。重写getView(int position, View view, ViewGroup viewGroup)方法。 4. 在 MainActivity加载适配器。查看全部
-
scrollTo 和 scrollBy区别 scrollTo: 相对于滚动视图的起始位置,去滚动相应的距离,所以只能滑动一次。 scrollBy: 相对于当前位置,去滚动相应的距离,每滚动一次就会更新当前位置,所以能不断滚动。 scrollBy的源码: public void scrollBy(int x,int y){ scrollTo(mScrollX + x , mScrollY + y); } 其中,mScrollX 和 mScrollY 表示当前坐标。 ---------------------------------- 应用案例:控制ScrollView视图的位置 实际案例:小说阅读,想要回到上次看的地方,如果采取手势滑动,要不停地滑,会比较麻烦,而现在采取按钮的方式代替手势滑动,可以直接定位到你上次浏览的地方,实现方法是记录上一次退出的位置,下次浏览时使用 scrollTo 或者 scrollBy 去恢复到上次浏览到的位置。 ------------------------------------- 通过按钮滑动视图的步骤 1. 在 main.xml 中添加两个 Button,分别表示向上和向下(这里是垂直的ScrollView)。 2. 在 MainActivity中初始化这两个Button。令 MainActivity 实现接口 OnClickListener。 3. 对两个按钮设置监听器。 4. 重写 onClick(): (1)使用switch,通过view.getId()判断是哪个按钮点击。 (2)使用 scrollTo(int x,int y) 或者 scrollBy(int x,int y)实现滑动。查看全部
举报
0/150
提交
取消