Android

Java安卓学习总结(六)

Android与MVC设计模式(1/1)

有关配置识别成员变量前缀

一开始在看生成getter方法与setter方法时不明白为什么要配置这个前缀,经过查询后发现这个是约定俗成的规矩。

Android 编程的时候一般约定成员变量都是小写的m开头,如果不配置前缀,生成getter方法与setter方法后必然方法名之内会包含小写的m。如getmTextTesId()->getTextResId()。设置前缀之后构造方法时会自动排除掉与变量本身无关联的小写m。这不仅是为了用着习惯,还能避免造成由于这个小写m带来的不必要的困扰。

有关MVC设计模式

Model对象与Android本身无太大关系,它更侧重于实现软件的需求,存储和管理应用数据。Model在任何开发平台上应该都是一致的。

View对象主要体现是.xml文件,包括其中定义的所有视图类。

Controller对象可以认为是程序入口,里面有逻辑单元,有消息处理机制,还管理数据流动。在我目前所学的看来,Controller对象就是有

onCreate(Bundle savedInstanceState)

的对象。

关于挑战练习

为TextView添加监听器

直接写一个和NextButton按钮一样的监听方法就可以了。

mQuestionQtextview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCurrentIndex=(mCurrentIndex+1)%mQuestionBank.length;
            updateQuestion();
        }
});

添加后退按钮

看题目要求,两个前进和后退的按钮要在对错按钮的下面,那么需要在上层布局中再添加一个水平线性布局,再在这个新增的水平布局里面加两个按钮。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    //...>
    //...
    <LinearLayout>
        //...
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/prev_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/prev_button"
            android:drawableLeft="@drawable/arrow_left"
            android:drawablePadding="4dp"/>
        <Button
            android:id="@+id/next_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/next_button"
            android:drawableRight="@drawable/arrow_right"
            android:drawablePadding="4dp"/>
    </LinearLayout>
</LinearLayout>

我发现大小设置为wrap_content的控件,如我用到的Button和TextView,大小都是由其text属性的文本实际显示长度决定的。

qq screenshot 20200519223612

drawableLeftdrawableRight属性,是确定图片资源相对于text(应该是内容content)来确定图片的位置。并且似乎一边只能插入一个图片,否则会报错。

qq screenshot 20200519224105
qq screenshot 20200519224207

然后就可以为prev_button添加事件监听了。方法如同next_button,只不过监听方法内生成题目的编号时出现了与CZT一样的闪退错误。

mCurrentIndex=(mCurrentIndex-1)%mQuestionBank.length;

应当写成

mCurrentIndex=(mCurrentIndex-1+mQuestionBank.length)%mQuestionBank.length;

原因:负数参与的取模运算规则:先忽略负号,按照正数运算之后,被取模的数是正数结果就取正,反之取负。

从按钮到图标按钮

drawableLeftdrawableRight属性当且仅当存在text时才会有效。当删除了text时,使用的图片资源也不显示了。

qq screenshot 20200519230135

并且drawablePadding属性似乎对图片资源无效。分别设置为4dp和40dp没有任何差别。

qq screenshot 20200519230355

最后将Activity中的Button替换成ImageButton即可。

发表评论