Android入门(listview控件)
很烦,,,写了好久然后浏览器闪退了。。。然后写的全无了。所以再写一遍就随便写点了。使用listview的关键。 基本使用 直接在布局引入一个listview控件 然后因为listview的数据不能直接传入。需要通过adapter适配器来实现的,其中最常用的就是arrayAdapter 因此在activity中,初始化一个arrayAdapter。 他的初始化一共需要三个参数。 activity:也就是需要把本类传进去。 resourceid: 需要传入子项布局(也就是listview中每一项内容的样式布局)(可以使用系统默认的,也可以自己定义一个布局。这里不展示) data:传入数据源,一般都是列表。 然后使lisview的adapter属性赋值为你初始的内容1listview.adapter =...
Android自定义控件(详解)
在本质上,所有的控件和布局都是View类的子类。也就是说明,在理论上,你可以自己手搓一个控件,也就是自定义控件。而且定义自己的方法和图形,界面等。而这都是可行的。 三种自定义控件自绘控件自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的。这是一个完完全全由自己设计的控件 组合控件组合控件的意思就是,我们并不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但我们可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。 继承控件继承控件的意思就是,我们并不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能,比如 Android PowerImageView实现,可以播放动画的强大ImageView 这篇文章中介绍的PowerImageView就是一个典型的继承控件。 布局文件转化成view类(三种方式)1.//context:上下文,...
Android自定义控件
布局和控件的继承关系 引入布局我们可以自定义一个布局,然后把这个布局当作一个控件通过<include layout="布局文件">标签实现引入。比如自己设计的标签栏设计为一个布局文件,然后把这个布局文件当作一个控件,然后去引入他。但是,这样子的控件没有统一设定的逻辑,只有样式,没有逻辑程序设计,如果每个调用该布局的都重写一遍逻辑结构,就会有很多的冗杂代码。因此 创建自定义控件实现控件的逻辑自洽。不用再去花更多的代码去重复操作。 新建TitleLayout继承自LinearLayout,让它成为我们自定义的标题栏控件,代码如下所示: 12345class TitleLayout(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { init { LayoutInflater.from(context).inflate(R.layout.title, this)...
Android常用布局
布局和控件的关系 LinearLayout 属性 释义 样例 orientation 指定了排列方向 vertical,horizontal layout_gravity 控制控件的对齐方式 layout_weight 指定控件的大小 一般会将layout_width指定为0dp,这是一种标准的写法 layout_weight的计算方式系统会先把LinearLayout下所有控件指定的layout_weight值相加,得到一个总值,然后每个控件所占大小的比例就是用该控件的layout_weight值除以刚才算出的总值。因此如果想让EditText占据屏幕宽度的3/5,Button占据屏幕宽度的2/5,只需要将EditText的layout_ weight改成3,Button的layout_weight改成2就可以了。 RelativeLayout相对布局 1234567<Button android:id="@+id/button5"...
Android常用控件
常用控件TextView显示文本 属性 释义 样例 gravity 来指定文字的对齐方式 top,bottom,start等 textColor 指定文字颜色 red,green textSize 指定文字大小 sp为单位,这样当用户在系统中修改了文字显示尺寸时,应用 程序中的文字大小也会跟着变化。重新运行程序 text 指定文字内容 Button放置按钮 属性 释义 样例 textAllCaps 指定文字是否大小写 false,true 注册Button点击事件的方式 函数式API123button.setOnClickListener { // 在此处添加逻辑 } 2.用实现接口的方式来进行注册 12345678910111213141516 class MainActivity : AppCompatActivity(),View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { ...
Kotlin标准方法with,run,apply AND 静态方法
标准函数with,run,apply123456789101112131415161718192021222324252627282930313233343536373839404142fun main() { //常用写法 val list = listOf("apple", "banana", "orange", "pear", "grape") val builder = StringBuilder() builder.append("Start eat fruits\n") for (fruit in list) { builder.append(fruit + "\n") } builder.append("Ate all fruits\n") println(builder) //使用with作为标准函数来写 ...
Activity最佳实践
知晓当前时哪一个activity直接创建一个kotlin的类,,他与Activity的创建方法不一样。创建BaseActivity类 12345678open class BaseActivity:AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Log.d("BaseActivity",javaClass.simpleName) //javaClass表示获取当前实例的class对象,相当于在java中调用getClass方法 //::class.java表示获取BaseActivity类的Class对象。相当于在Java中调用BaseActivity.class反射 ActivityCollector.addActivity(this) ...
Activity启动模式
...
Activity被回收
一般情况下,只有activity被销毁后才hi被回收。可是,当系统内存不足时,他会将处于停止状态的activity也回收了。如果停止状态的activity没被回收,那么再次启动时,将会执行onRestart()方法,然后恢复数据,但是如果被回收后,他会执行onCreate()方法,也就导致,如果这个activity有文本输入框的话,这些数据都会直接消失。 因此为了解决这个问题,Activity提供了一个onSaveInstanceState()回调方法。他在回收前一点会调用该方法。该方法需要一个Bundle参数,也可以用put之类的保存键值对参数。如下代码: 12345override fun onSaveInstanceState(outState: Bundle){ super.onSaveInstanceState(outState) val tempData = "Something you just...
Activity生命周期
...