查看: 1558|回复: 0

[手机开发] 开发日记三:使用 ViewHolder 与 XML 编写 UI

发表于 2018-4-11 08:00:00

原标题:大前端 Android 开发日记三:使用 ViewHolder 与 XML 编写 UI

在之前的两天里,我花了大量的时间在熟悉系统的架构上。因此,在这一天里,我主要花费的时间都是在编写 UI 上,以及对应的一些事件处理。

ViewHolder 的事件

按官网的说明:

一个 ViewHolder 描述一个项目视图和关于它在 RecyclerView 中的位置的元数据。

对于我使用例子是,我是在我的列表中的条目中使用 ViewHolder,因此每个条目都是单一的 view。这是一个示例的 ViewHolder,我在它的构建类里添加了一个 onClick 事件:

public class RelatedViewHolder extends RecyclerView.ViewHolder {    public RelatedNewsViewHolder(View view) {        super(view);        this.view = view;
        ButterKnife.bind(this, view);

        onClick(view);
    }
}

而在这个 Click 事件里,启动了一个新的 Activity:

public void onClick(View itemView) {
    itemView.setOnClickListener(view -> {
        Intent intent = new Intent();
        Context context = itemView.getContext();

        intent.setComponent(new ComponentName(context, DetailActivity.class));
        context.startActivity(intent);
    });
}

在这里面里,我们会启动一个新的 Activity。

获取 Android Device UUID

在实现的过程中,还需要一个获取设备的 UUID。DeviceID 有一个问题时,用户可能不会同意获取,于是还需要一个新的 UUID。为了简化这个逻辑,直接使用 Google 推荐的 UUID,而不是再去用 DeviceID。

public class DeviceUtil {    private static String uniqueID = null;    private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";    public synchronized static String getDeviceUUID(Context context) {        if (uniqueID == null) {
            SharedPreferences sharedPrefs = context.getSharedPreferences(
                    PREF_UNIQUE_ID, Context.MODE_PRIVATE);
            uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);            if (uniqueID == null) {
                uniqueID = UUID.randomUUID().toString();
                SharedPreferences.Editor editor = sharedPrefs.edit();
                editor.putString(PREF_UNIQUE_ID, uniqueID);
                editor.apply();
            }
        }        return uniqueID;
    }
}

在这个逻辑里,会判断机器上是否存储有之前的 UUID。如果没有的话,就生成一个新的;反之,则从 SharedPreferences 中获取一份。

实现 Android 后退按钮

由于打开的是新的页面,因此需要自己做一个 Toolbar,相应的配置代码如下所示:



    

接着,定制一个新的返回按钮标题:

然后,导入这个 xml:

同时在我们的 Activity 中添加对应的事件处理:

@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    if (item.getItemId() == android.R.id.home) {
        onBackPressed();        return true;
    }    return super.onOptionsItemSelected(item);
}
矢量图形:Vector Path

还遇到一个很有遇到的问题是,可以在 Android 中使用类似于 SVG 的 Vector:


     
         
     
 

它也是类似的使用 Path,来描述 UI。

ScrollView

最后,花费了一些时间在编写一个 ScrollView 上,结合了之前上面的 Toolbar 等内容:



    

    

        

        
    




回复

使用道具 举报