Android学习心得第一课

来源:互联网 发布:淘宝怎么卖话费 编辑:程序博客网 时间:2024/06/05 05:06

说来惭愧,做事情从来都是半途而废,考研也是,哎,一直说要学习点什么,结果从研一上半学期一直到现在才真正开始第一次实践,不过知耻后勇,希望能过在未来的日子里面能够一直坚持下去,去真正的做成功一件事情。
第一部分 3种监听方式
在Android里面一个按钮被点击后应该会触发相应的动作,这个时候就需要一个监听器来告诉程序,当按钮被点击后应该产生一个怎样的动作。这里总共有三种监听的方式:采用匿名内部类的监听方式,独立外部类的监听方式,采用接口的方式进行监听,下面分别对这三种方式举一个例子进行介绍。
(1)匿名内部类的监听方式

 public class MainActivity extends Activity {    private Button loginbutton;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//      实现监听的第一种方式 匿名内部类的方式//      初始化当前的监听控件//      这里findviewById这个函数默认的返回类型是view类型,所以必须强制转换成button类型        loginbutton = (Button) findViewById(R.id.button1);//      实现监听的动作  这里采用的就是匿名内部类的方式        loginbutton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                System.out.println("你的button按钮被点击了");            }        });    }}

这种方式在整个Android的button事件中使用的最为频繁,因为在大部分情况下,事件处理器都没有什么价值,而有价值的代码也早已被抽象成了业务逻辑的方法,所以大部分的事件处理器都是一次性的,这个时候采用匿名内部类就比较方便,在实际的编程我们一般比较推崇这种方法,这种方法的缺点就是匿名内部类的语法较为复杂,不太容易掌握。
(2)外部独立类的监听方式

public class MainActivity extends Activity {    private Button bt2;    private Button bt3;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);       /*          这里对按钮2和按钮3进行外部类监听的方式进行实现,这种方法主要是用于处理多个按钮要实现          同一个动作的时候,为了避免代码的冗余,而将代码集中于外面类中,通过对外部类的操作,来达到          修改和功能的实现。       */       bt2 = (Button) findViewById(R.id.button2);       bt3 = (Button) findViewById(R.id.button3);       bt2.setOnClickListener(new MyOnClickListener(){            public void onClick(View v) {                // TODO Auto-generated method stub                super.onClick(v);                Toast.makeText(MainActivity.this,"bt2要执行的逻辑", 1).show();            }       });       bt3.setOnClickListener(new MyOnClickListener(){            public void onClick(View v) {                // TODO Auto-generated method stub                super.onClick(v);                Toast.makeText(MainActivity.this,"bt3要执行的逻辑", 1).show();            }       });    }}// 独立类(即第二种)外部监听的方式class MyOnClickListener implements OnClickListener{    @Override    public void onClick(View v) {   //      为所有的类设置同一个监听事件,这里是设置button的透明度         v.setAlpha(0.5f);    }}

在这里对外部类做一个说明,在实际的开发过程中,外部类一般是用作当有多个button需要完成同一个动作的时候,这个将这个操作全部写入这个外部类中,然后所有的button调用这个接口从而完成相应的动作,这样做的好处是以后在后期进行修改的时候只需要对这个外部类进行修改即可,并且遇到这种情况,比起第一种方法,可以减少代码的冗余。
但是这种方法在实际的编程习惯中运用的并不多,将事件监听器定义成外部类,不容易提高程序的内聚性,因为事件监听器属于一种特定的gui界面, 而且外部定义的监听类无法自由的访问内部的类的组件,这就会造成编程上的不简洁。
(3)采用接口的方式进行监听

public class MainActivity extends Activity implements OnClickListener{    private ImageButton imgbt;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);       imgbt = (ImageButton) findViewById(R.id.imageButton1);       imgbt.setOnClickListener(this);    }    /*这里我们第三种的监听方式     * 就是通过接口的方式来实现监听     */    public void onClick(View v) {        Log.i("tag", "通过接口的方式实现监听");    }}

这种方法是将activity本身定义为监听事件,这样的话可以在activity内部编写监听事件的操作,书写形式上十分简洁,但是这种方法笔者并不是十分赞成使用,首先这种写法本身就比较奇怪,activity本身是用来写用户界面的初始化,在这里面加入监听类,会让整个程序的逻辑显得十分混乱。
当然在网上百度了一些大神的博客,他们还给出了另外两种监听事件的写法,一种是内部类作为监听器,即将监听类写成当前类的内部类,还有一种就是直接绑定到标签里面,现在很多的标签本身就已经具有了onclick等属性,这个时候只需要在activity中定义一个方法就可以了。(笔者还没试过这两种方法,不过我对后一种方法比较感兴趣,后面可以写着试试看)。

第二部分 跑马灯效果的实现
这部分没有什么特别的东西,仅仅是三个属性就可以实现的了,他主要是为了应对当界面上的文字过长,而且不允许换行的时候,这时候就需要使用跑马灯的效果来使文字循环播放,闲话不多说,上下代码。

 <com.ccnu.marqueetextviewdemo.marqueetext        android:id="@+id/one"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:singleLine="true"        android:ellipsize="marquee"        android:focusable="true"        android:focusableInTouchMode="true"        android:text="@string/hello_world" />

这段xml代码的关键属性就是ellipsize、focusable、foucusableInouchMode这三个属性。

第三部分 实现动态输入自动匹配的内容
我们在进行百度搜索的时候,往往只需要输入几个字,就会出现很多相关的选项,下面我们就对这个属性进行研究。要实现这个功能仅仅需要两个控件即可,AutoCompleteTextView和MultiAutoCompleteTextView这两种控件在功能基本相似,不同之处在于,后者是用于多次输入的时候,而且和前者相比较的话,后者还要多一个分割符的属性,用于分割开多次输入。

public class MainActivity extends Activity {    private AutoCompleteTextView acTextView;    private MultiAutoCompleteTextView macTextView;    private String[] res = {"android1","android2","android3",                            "python1","python2","python3"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /*         * 第一步:初始化一个控件         * 第二步:需要一个适配器          * 第三步:初始化一个数据源---这个数据源是用来匹配搜索文本框的输入的内容         * 第四步:将adapter与当前的autoTextView相互绑定         */        acTextView = (AutoCompleteTextView) findViewById                              (R.id.autoCompleteTextView1);        ArrayAdapter<String> adapter = new ArrayAdapter<String>                    (this, android.R.layout.simple_list_item_1, res);        acTextView.setAdapter(adapter);        /*         * 第一步:初始化一个控件         * 第二步:需要一个适配器          * 第三步:初始化一个数据源---这个数据源是用来匹配搜索文本框的输入的内容         * 第四步:将adapter与当前的autoTextView相互绑定         * 第五步:设置分割符(这里默认的分割符是逗号)         */        macTextView = (MultiAutoCompleteTextView) findViewById                (R.id.multiAutoCompleteTextView1);        macTextView.setAdapter(adapter);        macTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());    }}
0 0
原创粉丝点击