内容简概

一、预期效果

二、通过xml方式创建

三、通过代码创建

四、最终效果

具体内容

一、预期效果

二、通过xml方式创建

(一)自定义控件属性

首先我们需要创建一个管理自定义属性的xml文件。

然后在文件中规定我们想要实现的属性,颜色、文本和位置等都属于资源文件(resource)。

(二)创建控件

接着到activity_main.xml文件中调用自定义属性创建控件,采用RelativeLayout布局。

android:layout_width="match_parent"

android:layout_height="64dp"

app:my_background="#877466"

app:show_back="true"

app:back_title="返回主页"

app:back_position="1"/>

(三)实现自定义控件

最后在MainActivity中设置layout布局。自定义内容均在activity_main.xml文件中修改。

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

三、通过代码创建

(一)自定义控件属性

这一步过程与上述xml方式创建的第一步相同。

(二)创建控件

首先在图中位置新建一个用于创建控件的Java Class。

接着在创建的类中创建控件。

public class NavigationBar extends RelativeLayout {

// 定义一个变量保存外部设置的颜色 默认灰色

private int MyBackground = Color.GRAY;

// 记录是否需要返回按钮

private boolean show_back = false;

// 返回按钮

private Button back;

// 返回按钮的布局属性

LayoutParams params;

// 使用Java代码创建控件

public NavigationBar(Context context) {

// super(context);

// init();

this(context,null);

}

// 使用xml创建控件

public NavigationBar(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init(context,attrs);

}

// 初始化控件

private void init(Context context, AttributeSet attr){

// 设置横向布局

// setOrientation(LinearLayout.HORIZONTAL);

// 设置背景

setBackgroundColor(Color.GRAY);

// 设置内容垂直居中

setGravity(Gravity.TOP);

// 判断是否是XML配置的

if (attr != null){

// 从attr里提取xml里面配置的所有属性

TypedArray typeArray = context.obtainStyledAttributes(attr,R.styleable.NavigationBar);

// 提取需要的属性

int color = typeArray.getColor(R.styleable.NavigationBar_my_background, Color.rgb(87,74,66));

// 是否需要返回按钮

boolean show = typeArray.getBoolean(R.styleable.NavigationBar_show_back,false);

// 是否需要标题

String title = typeArray.getString(R.styleable.NavigationBar_back_title);

// 取返回按钮的位置

int position = typeArray.getInteger(R.styleable.NavigationBar_back_position,1);

// 使用数据

setMyBackground(color);

setShow_back(show,title);

setPosition(position);

}

}

public int getMyBackground() {

return MyBackground;

}

public void setMyBackground(int myBackground) {

this.MyBackground = myBackground;

// 将外部传递过来的颜色 设置为背景颜色

setBackgroundColor(MyBackground);

}

public boolean isShow_back() {

return show_back;

}

public void setShow_back(boolean show_back,String title) {

this.show_back = show_back;

if (show_back == true){

// 创建返回按钮

back = new Button(getContext());

// 设置按钮的布局属性

params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int) (10*getResources().getDisplayMetrics().density);

// 设置标题

if(title != null){

back.setText(title);

}else {

back.setText("Back");

}

// 添加控件

addView(back,params);

}

}

/**

* 区别左右

*/

public interface myPosition{

int LEFT = 0;

int RIGHT = 1;

}

/**

* 设置按钮位置

* @param position LEFT RIGHT

*/

public void setPosition(int position){

// 判断是否有back按钮

if (back != null){

if (position == myPosition.LEFT){

params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

}else {

params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

}

}

}

}

(三)实现自定义控件

最后在MainActivity中实例化对象。自定义内容均在test函数中修改。

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

test();

}

private void test(){

// 代码方式创建控件

NavigationBar bar = new NavigationBar(this);

// 设置背景颜色

bar.setBackgroundColor(Color.rgb(87,74,66));

// 设置返回按钮

bar.setShow_back(true,"返回主页");

// 设置显示的位置,0为左,1为右

bar.setPosition(0);

// 让当前这个控件作为activity的主视图

setContentView(bar);

}

}

四、最终效果

相同属性:

①show_back="true"

②back_title="返回主页"

③my_background="#877466"

不同属性:

①back_position="0" // 按钮在左边

②back_position="1" // 按钮在右边

(一)xml方式创建

(二)代码方式创建

android标题返回,【Android开发】自定义控件——带返回键标题栏相关推荐

  1. java无参_Java中无参无返回和无参带返回的类型方法

    在前面的文章中,我们学习了java中方法的定义.分类及调用的相关知识.知道了java中的方法其实可以叫做函数,目的是实现某些我们想要的功能,也知道了java中方法的分类共有四种:无参无返回.无参带返回 ...

  2. 小程序手势返回以及手机自带返回功能问题解决思路

    一般苹果手机不会自带手势返回以及原生手机返回按钮,所以我们的组件返回功能是可以去做一些自定义的事情的. 但是安卓手机大部分有原生手机自带的返回按钮以及手势返回,这个时候我们可以通过 onUnload生 ...

  3. android 标题样式,Android定义各种样式的标题栏:requestWindowFeature()

    最近在网上看到一篇介绍Android window的requestWindowFeature()的使用方法,共享出来大家学习学习 requestWindowFeature(Window.FEATURE ...

  4. Mysql带返回值与不带返回值的2种存储过程

    过程1:带返回值: 1 drop procedure if exists proc_addNum; 2 create procedure proc_addNum (in x int,in y int, ...

  5. Android重写菜单增加系统自带返回键

    条件:当前项目导入了ActionBarSherlock这个jar包,这个jar包的作用为了程序的兼容性,考虑低版本的问题. 学习ActionBarSherlock参考博客链接:http://blog. ...

  6. android 标题图标,android 中 actionbar 常用方法。设置标题,隐藏图标等

    设置标题: actionBar.setTitle("关于我们"); 使返回箭头出现 actionBar.setDisplayHomeAsUpEnabled(true); 监听返回按 ...

  7. C++ 多线程之带返回值的线程处理函数

    写在前面:         又是学C扎扎的一天,C扎扎学起来果然扎手.如果你能坚持看到文章最后,你会发现,好吧有可能你啥也发现不了,因为后面什么也没有~~~ 目录 1. 使用 async 函数创建线程 ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

最新文章

  1. java向某一IP发送消息_javaTCP如何将数据发送给指定IP的客户端(求代码)谢谢! 爱问知识人...
  2. 【C#技术】一篇文章搞掂:Infragistics组件库
  3. 东农计算机应用与技术离线作业,东农16春《计算机应用与技术》在线作业.doc
  4. 字节数组输入流读取操作
  5. java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧
  6. 学员使用移动端进行自学的视频动画html,Html5移动端获奖无缝滚动动画实现
  7. 初识JS-基础中的基础
  8. [转载]Qt之模型/视图(自定义风格)_vortex_新浪博客
  9. linux用c++获取mac地址,网卡地址,网口地址,网卡序号ip地址,不使用 ioctl(sock, SIOCGIFCONF, ifc)获取网络接口名称,这个接口有时会返回-1获取不到,换方法获取
  10. python类的继承代码_python--类的继承
  11. WindowsNT/2000的系统日志文件
  12. eyoucms如何管理栏目
  13. 水果店的售价应该怎么来定,水果店怎样确定价格
  14. 播布客学习视频_C学习笔记_simple
  15. 小小靖Java成长日记02
  16. 南大庄建军计算机学院讲座,2015年全国大学生电子设计竞赛工作经验交流会汇报_南京大学庄建军.ppt...
  17. mount 挂载 img
  18. 漂浮式半潜风机(一)稳性分析
  19. 校准报告确认有哪些方法?为什么需要进行确认?
  20. 项目场景: gyp verb check python checking for Python executable python2 in the PATH

热门文章

  1. java请模拟出双重定时器_Java多线程基础 - osc_czmaebyq的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. 什么是python编程例子_案例详解:优化Python编程的4个妙招
  3. win10专业版虚拟机配置服务器,虚拟机专用专业版win10 账号密码
  4. Kubernetes 集群 DNS 服务发现原理
  5. 如何让快递更快?菜鸟自研定时任务调度引擎首次公开
  6. 关于类DOTA游戏多样化技能系统的设计思考
  7. Love2D游戏引擎制作贪吃蛇游戏
  8. 2022年3月23日15:51:00——百度2班留存
  9. SQL Editor and reconnect【mysql(workbench)更新数据时候的一个异常】【Error Code:1175】
  10. RedHat5.5_X64 Linux安装oracle 11.2.0.3 报错