Github地址:美食分享平台,欢迎star和fork

注:本文只设计个人信息界面的设计,不包括活动和后台逻辑。活动设计和后台可以参见Android开发(4):个人信息修改个人信息,修改头像设计

效果图

思路

这个界面可以分为三个部分:标题栏,头像栏,其他信息栏。

标题栏其他界面也可能用到,可以直接设计成一个widget

头像栏,因为方形图片会很不好看,这个圆形头像也可以设计成一个widget

信息栏目的格式都很大同小异,如果单独设计会增加很多重复代码,那么也设计成一个widget。

文件目录

新建widget文件夹,然后新建三个Java类。标题栏(TitleLayout),圆形头像(RoundImageView),信息栏(ItemGroup)

设计

1. 标题栏

标题栏可以根据自己喜欢的样式修改

layout:

TitleLayout:

public class TitleLayout extends LinearLayout {

private ImageView iv_backward;

private TextView tv_title, tv_forward;

public TitleLayout(Context context, AttributeSet attrs) {

super(context, attrs);

LinearLayout bar_title = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.bar_title, this);

iv_backward = (ImageView) bar_title.findViewById(R.id.iv_backward);

tv_title = (TextView) bar_title.findViewById(R.id.tv_title);

tv_forward = (TextView) bar_title.findViewById(R.id.tv_forward);

//设置监听器

//如果点击back则结束活动

iv_backward.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

((Activity)getContext()).finish();

}

});

}

}

头像栏

头像栏一般不需要改动了,直接用就可以了

圆形头像类:

public class RoundImageView extends AppCompatImageView {

public RoundImageView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public RoundImageView(Context context) {

super(context);

init();

}

private final RectF roundRect = new RectF();

private float rect_adius = 90;

private final Paint maskPaint = new Paint();

private final Paint zonePaint = new Paint();

private void init() {

maskPaint.setAntiAlias(true);

maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

maskPaint.setFilterBitmap(true);

zonePaint.setAntiAlias(true);

zonePaint.setColor(Color.WHITE);

zonePaint.setFilterBitmap(true);

float density = getResources().getDisplayMetrics().density;

rect_adius = rect_adius * density;

}

public void setRectAdius(float adius) {

rect_adius = adius;

invalidate();

}

@Override

protected void onLayout(boolean changed, int left, int top, int right,

int bottom) {

super.onLayout(changed, left, top, right, bottom);

int w = getWidth();

int h = getHeight();

roundRect.set(0, 0, w, h);

}

@Override

public void draw(Canvas canvas) {

canvas.saveLayer(roundRect, zonePaint, Canvas.ALL_SAVE_FLAG);

canvas.drawRoundRect(roundRect, rect_adius, rect_adius, zonePaint);

//

canvas.saveLayer(roundRect, maskPaint, Canvas.ALL_SAVE_FLAG);

super.draw(canvas);

canvas.restore();

}

}

信息栏

信息是按照一个ItemGroup类完成,可以通过app:来修改属性,这部分代码也一般不需要修改。可以定义的属性可以阅读代码或者查看博客Android编辑信息界面,组合控件的封装

首先是每个栏(item)是界面:

实现的ItemGroup

public class ItemGroup extends FrameLayout{

private LinearLayout itemGroupLayout; //组合控件的布局

private TextView titleTv; //标题

private TextView contentEdt; //输入框

private ImageView jtRightIv; //向右的箭头

public TextView getContentEdt() {

return contentEdt;

}

public ItemGroup(@NonNull Context context) {

super(context);

initView(context);

}

public ItemGroup(@NonNull Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

initView(context);

initAttrs(context, attrs);

}

public ItemGroup(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {

super(context, attrs, defStyleAttr);

initView(context);

initAttrs(context,attrs);

}

//初始化View

private void initView(Context context) {

View view = LayoutInflater.from(context).inflate(R.layout.item_group_layout, null);

itemGroupLayout = (LinearLayout) view.findViewById(R.id.item_group_layout);

titleTv = (TextView) view.findViewById(R.id.title_tv);

contentEdt = (TextView) view.findViewById(R.id.content_edt);

jtRightIv = (ImageView) view.findViewById(R.id.jt_right_iv);

addView(view); //把自定义的这个组合控件的布局加入到当前FramLayout

}

/**

* 初始化相关属性,引入相关属性

*

* @param context

* @param attrs

*/

private void initAttrs(Context context, AttributeSet attrs) {

//标题的默认字体颜色

int defaultTitleColor = context.getResources().getColor(R.color.gray3);

//输入框的默认字体颜色

int defaultEdtColor = context.getResources().getColor(R.color.black0);

//输入框的默认的提示内容的字体颜色

int defaultHintColor = context.getResources().getColor(R.color.gray9);

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ItemGroup);

String title = typedArray.getString(R.styleable.ItemGroup_title);

float paddingLeft = typedArray.getDimension(R.styleable.ItemGroup_paddingLeft, 15);

float paddingRight = typedArray.getDimension(R.styleable.ItemGroup_paddingRight, 15);

float paddingTop = typedArray.getDimension(R.styleable.ItemGroup_paddingTop, 5);

float paddingBottom = typedArray.getDimension(R.styleable.ItemGroup_paddingTop, 5);

float titleSize = typedArray.getDimension(R.styleable.ItemGroup_title_size, 15);

int titleColor = typedArray.getColor(R.styleable.ItemGroup_title_color, defaultTitleColor);

String content = typedArray.getString(R.styleable.ItemGroup_edt_content);

float contentSize = typedArray.getDimension(R.styleable.ItemGroup_edt_text_size, 13);

int contentColor = typedArray.getColor(R.styleable.ItemGroup_edt_text_color, defaultEdtColor);

String hintContent = typedArray.getString(R.styleable.ItemGroup_edt_hint_content);

int hintColor = typedArray.getColor(R.styleable.ItemGroup_edt_hint_text_color, defaultHintColor);

//默认输入框可以编辑

boolean isEditable = typedArray.getBoolean(R.styleable.ItemGroup_isEditable, true);

//向右的箭头图标是否可见,默认可见

boolean showJtIcon = typedArray.getBoolean(R.styleable.ItemGroup_jt_visible, true);

typedArray.recycle();

//设置数据

//设置item的内边距

itemGroupLayout.setPadding((int) paddingLeft, (int) paddingTop, (int) paddingRight, (int) paddingBottom);

titleTv.setText(title);

titleTv.setTextSize(titleSize);

titleTv.setTextColor(titleColor);

contentEdt.setText(content);

contentEdt.setTextSize(contentSize);

contentEdt.setTextColor(contentColor);

contentEdt.setHint(hintContent);

contentEdt.setHintTextColor(hintColor);

// contentEdt.setFocusable(isEditable); //设置输入框是否可以编辑

// contentEdt.setClickable(true);

// contentEdt.setKeyListener(null);

jtRightIv.setVisibility(showJtIcon ? View.VISIBLE : View.GONE); //设置向右的箭头图标是否可见

}

}

组装

完成上述的前置工作,我们就可以通过上面的组件进行界面的编辑了。

结构大概如下:

我的代码示例:

参考链接

Android实现圆形Imageview,带白色边框

android 提示页面设计,Android开发(3):个人信息界面设计相关推荐

  1. 基于Android的短信应用开发(一)——界面设计开发

    刚刚接触Android开发,最近自己在上手开发一个手机短信应用,由于是从头开始开发,首先还是得设计实现界面,初步效果如图: 程序代码如下 1.MainActivity.java package com ...

  2. Android Studio 开发–微信APP门户界面设计

    Android Studio 开发–微信APP门户界面设计 本次Github代码仓库 --crcr1013/MyWechat 文章目录 Android Studio 开发--微信APP门户界面设计 前 ...

  3. 蓝牙聊天App设计1:Android Studio制作蓝牙聊天通讯软件(UI界面设计)

    前言:蓝牙聊天App设计全部有三篇文章(一.UI界面设计,二.蓝牙搜索配对连接实现,三.蓝牙连接聊天),这篇文章是一.UI界面设计 课程1:Android Studio小白安装教程,以及第一个Andr ...

  4. android仿微博头像_Android仿新浪微博个人信息界面及其他效果

    本教程为大家分享了Android微博个人信息界面设计代码,供大家参考,具体内容如下 如果你已经实现前面的功能那个这个人信息界面便是小菜一碟,此处不作叙述. 补充 1.时间处理类: 处理微博发出时间距现 ...

  5. android 关于页面,解析android中的帮助、about、关于作者、HELP等提示页面

    在android中,经常要用到帮助.about.关于作者等的提示页面. 类似这样的页面: 这样的页面,我们可以通过AlertDialog对话框来设计. 设计一个AboutDialog类继承于Alert ...

  6. Android开发(3):个人信息界面设计

    Github地址:美食分享平台,欢迎star和fork 注:本文只设计个人信息界面的设计,不包括活动和后台逻辑.活动设计和后台可以参见Android开发(4):个人信息修改个人信息,修改头像设计 效果 ...

  7. 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面

    大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...

  8. Android Studio 开发–微信APP门户界面设计(二)

    本次Github代码仓库 --crcr1013/MyWechat 文章目录 一.成果要求 二.关键步骤 1.准备工作 1.1环境准备 1.2布局构想及资源准备 2. 朋友圈的RecyclerView布 ...

  9. android 机顶盒 页面布局,Android机顶盒用户DIY手册.doc

    (完美WORD文档DOC格式,可在线免费浏览全文和下载)值得下载! Huawei Technologies Co.,Ltd.Android机顶盒用户DIY手册[键入文档副标题][刘勋][2011-12 ...

最新文章

  1. 分词 正文提取 java
  2. helm uninstall命令的使用:卸载Release
  3. kettle根据参数动态派生列
  4. 【深度】机器学习进化史:从线性模型到神经网络
  5. .NET 4.0 调用 C dll 触发 AccessViolationException 异常的处理方案
  6. 笔记本 win7 装vs2010 报错 注册表 拒绝访问等
  7. ssh scp不用输入密码
  8. GeekOS课程设计-project1
  9. ue4渲染速度太慢_技术汇丨如何在UE4中实现最佳性能和高质量视觉效果
  10. Android ScrollView 使用总结
  11. 在js中如何比较两个时间字符串的大小
  12. 【数据结构】进击的二叉查找树
  13. HTML 区块、布局与框架
  14. uc/os--OSRdyTbl
  15. 新华三面试总结(二)
  16. Trimble Yuma超级掌上计算机实机感受
  17. STM32制作红外遥控和红外接收装置
  18. 【翻译】第四章 MMS-EASE Lite底层
  19. 3032. 是坚挺数吗?
  20. Python学习三:Python开发工具

热门文章

  1. 不要污要优雅!国产VR游戏《甜蜜软妹子》上线
  2. 2020 年新基建七大领域 数据“新基建”
  3. [转帖] Kubernetes如何使用ReplicationController、Replica Set、Deployment管理Pod ----文章很好 但是还没具体操作实践 也还没记住....
  4. 情人节到了,送自己一个女朋友
  5. 用手机连接电脑的360免费WiFi(电脑自带的无线网卡启动AP模式)
  6. 详解JS原型与原型链
  7. CAJ转换成PDF在线方法是什么
  8. 找到属于自己的路——leo鉴书62
  9. 《阅读的方法》读书笔记4-1:极致的体验
  10. 命令模式 Java代码演示【使用命令模式实现播放器功能】