Android - ToDoList(定制样式) 详解

ToDoList(定制样式) 详解


本文地址: http://blog.csdn.net/caroline_wendy/article/details/21330733


本文的合集已经编著成书,《高级Android开发强化实战》,欢迎各位读友的建议和指导。

在京东即可购买:https://item.jd.com/12385680.html





Android允许从已有的视图工具箱(Widget Tool Box)派生子类 或 实现自己的视图控件;

通过重写事件处理程序onDraw()方法, 但是仍然回调超类(super)的方法, 可以对视图进行定制, 而不必实心它的功能;

前置步骤参见: http://blog.csdn.net/caroline_wendy/article/details/21246963


步骤: 

1. 创建ToDoListItemView类, 定制Item项的外观:

位置: java->package->ToDoListItemView.java

package mzx.spike.todolist.app;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * Created by C.L.Wang on 14-3-16.
 */
public class ToDoListItemView extends TextView{

    private Paint marginPaint;
    private Paint linePaint;
    private int paperColor;
    private float margin;

    public ToDoListItemView (Context context, AttributeSet ats, int ds) {
        super(context, ats, ds);
        init();
    }

    public  ToDoListItemView (Context context) {
        super(context);
        init();
    }

    public ToDoListItemView (Context context, AttributeSet ats) {
        super(context, ats);
        init();
    }

    private void init() {

        //获得对资源列表的引用
        Resources myResources = getResources();

        marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        marginPaint.setColor(myResources.getColor(R.color.notepad_margin));

        linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        linePaint.setColor(myResources.getColor(R.color.notepad_lines));

        paperColor = myResources.getColor(R.color.notepad_paper);
        margin = myResources.getDimension(R.dimen.notepad_margin);
    }

    @Override
    public void onDraw(Canvas canvas) {

        canvas.drawColor(paperColor);

        canvas.drawLine(0, 0, 0, getMeasuredHeight(), linePaint);
        canvas.drawLine(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(), linePaint);

        canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint);

        canvas.save();
        canvas.translate(margin, 0);

        super.onDraw(canvas);
        canvas.restore();
    }

}

详解:

1. 继承TextView类, 是文本视图的定制;

2. 重载构造函数, 包含三个参数的重载版本,回调超类(super)之后,初始化资源私有变量(init);

3. 在Init()中, 获得资源列表的引用(getResource), 将资源文件转换为可以调用的参数(myResource.getXXX), 初始化资源私有变量;

4. 重写(Override)OnDraw方法, 设置颜色, 画线, 指定写入格式;

5. canvas.translate(), 使输出文件, 后移margin距离;


2. 创建颜色(colors)资源文件

位置: res->values->colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="notepad_paper">#EEF8E0A0</color>
    <color name="notepad_lines">#FF0000FF</color>
    <color name="notepad_margin">#90FF0000</color>
    <color name="notepad_text">#AA0000FF</color>
</resources>

颜色资源文件, 以color标签, Android Studio会显示颜色;


3. 修改尺寸(dimen)资源文件:

位置: res->values->dimen.xml

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="notepad_margin">30dp</dimen>
</resources>

补充即可;


4. 创建todolist_item布局文件:

位置: res->layout->todolist_item.xml

<?xml version="1.0" encoding="utf-8"?>

<mzx.spike.todolist.app.ToDoListItemView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:scrollbars="vertical"
    android:textColor="@color/notepad_text"
    android:fadingEdge="vertical"
/>

详解:

1. 标签为类名, 即ToDoListItemView类, 重载了TextView的方法;

2. 设置相应的属性标签;


5. 修改适配器(Adapter), 使用定制的TextView:

位置: java->package->ToDoListActivity

......
        int resID = R.layout.todolist_item;
        //三个参数
        aa = new ArrayAdapter<String>(this, resID, toDoItems);

        toDoListFragment.setListAdapter(aa);
......

详解:

找到资源文件的ID, 传入适配器;


6. 执行程序:
代码下载: http://download.csdn.net/detail/u012515223/7050371






Go微服务开发是利用Go语言进行微服务架构的开发方式。在这个问题中,使用了gin、grpc和etcd进行重构grpc-todolist项目。 Gin是一个轻量级的Web框架,使用它可以快速构建高性能的Web应用程序。它具有简单易用、性能出色和灵活的特点。在微服务开发中,Gin可以作为HTTP服务器框架,处理和响应客户端的HTTP请求。 gRPC是一种高性能、开源的远程过程调用(RPC)框架。它支持多种编程语言,并使用带有协议缓冲区的Google Protocol Buffers进行数据交换。在微服务架构中,gRPC可以用于服务之间的通信,通过定义接口和消息格式,实现服务间的数据传输和调用。 Etcd是一个高可靠、分布式的键值存储系统。它使用Raft一致性算法来保证数据的可靠性和一致性。在微服务开发中,Etcd可以作为服务发现和配置管理的工具,用于注册和发现各个微服务的信息。 对于重构grpc-todolist项目来说,使用gin可以将原有的HTTP接口改写为更加高性能的接口,提高整个系统的性能。通过使用gRPC,可以将原有的接口定义为gRPC接口,实现服务间的高效通信,并且易于扩展和维护。同时,借助Etcd实现服务注册和发现,提高系统的可用性和灵活性。 总而言之,通过使用gin、grpc和etcd对grpc-todolist项目进行重构,可以提高系统性能、扩展性和可维护性。这种微服务开发方式能够更好地适应大规模分布式系统的需求,使得系统更加稳定和可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElminsterAumar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值