Android学习心得第一课

说来惭愧,做事情从来都是半途而废,考研也是,哎,一直说要学习点什么,结果从研一上半学期一直到现在才真正开始第一次实践,不过知耻后勇,希望能过在未来的日子里面能够一直坚持下去,去真正的做成功一件事情。
第一部分 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());
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
经典的andriod入门必学一,堂复习 1,什么是安卓? 一款开源的基于linux的操作系统 2,安卓的体系结构 上层:基于java的应用程序开发 中间层:虚拟机Dalvik 底层:基于linux的C++编程 3,安卓的开发环境(IDE) 1,eclipse adt:让eclipse具备开发安卓的功能,是一个插件 android sdk:安卓开发工具包19.0 2,AndroidStudio android sdk:安卓开发工具包 22.0 二,安卓的工程目录 scr/包名/Activity:主要存放代码的目录 gen:(Generated Java Files)自动生成的java文件 assets:资产,存放大型数据文件,Html,css,音频,视频,大型的图片等文件 bin:程序编译完成之后生成的文件存放的目录,也是系统自动生成的 libs:存放第三方的jar包的目录 res:resource资源,图片,声音,文字,视图等等 drawable:图片资源 layout:布局视图文件存放的目录 menu:菜单 values:存放数值类型的资源。比如尺寸,文字,样式 AndroidManifest.xml:安卓app的配置,包括sdk,版本,四大组件的注册,权限等等 三,安卓工程的创建 1,点了一个花菜(创建了一个安卓应用程序的工程) 2,指派一名厨师(创建一个Activity必须继承Activity组件) 3,注册厨师(在AndroidMenifest.xml中注册Activity) 4,构思食材(在res/layout中,创建一个视图) 5, 找老王要菜,老王给了一个单子(在gen/R.java中生成的地址) 6,将食材拿到厨房中(在Activity中,创建onCreate方法,并且在其中,使用setContentView显示的视图) 7,做菜(就是通过findViewById找到对应的控件,执行操作) src:代码存放的地方 gen:自动生成控件的地址R.java res/layout:布局的设计图(通过setContentView才可以在Activity中显示) AndroidMenifest.xml目录,用于注册Activity 四,布局 LinearLayout:方向:(横和竖) 任何的控件,任何的布局都需要 layout_height layout_width 用于确定元素在当前空间中的大小 match_parent:和父类容器一样大 wrap_content:自己多大,就占多大空间 <requestFocus />用于请求光标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值