标题栏的公共抽取

2024-08-31 20:32
文章标签 公共 抽取 标题栏

本文主要是介绍标题栏的公共抽取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、情形描述

       在常使用的页面布局中,为保持用户一贯的使用风格,会保持页面的整体风格相似。除开底部导航外,标题栏是使用频率较高的另一种页面布局。如图所示:


          在程序猿“懒惰”的催促下,总是希望能够抽取成为公共的部分,在使用的时候就修改需要修改的地方就行。


二、第一种抽取方法

custom_common_title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/title_root_group"android:layout_width="match_parent"android:layout_height="80dp"android:background="@mipmap/head_bar"android:orientation="horizontal"><ImageViewandroid:id="@+id/title_left_iv"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:src="@mipmap/back" /><TextViewandroid:id="@+id/title_left_tv"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:visibility="gone" /><TextViewandroid:id="@+id/title_name_tv"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="6" /><ImageViewandroid:id="@+id/title_right_iv"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:src="@mipmap/enter"android:visibility="gone" /><TextViewandroid:id="@+id/title_right_tv"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1" /></LinearLayout>
BaseActivity.java

/*** 功能描述:抽取公共的基础Activity* <p>* <p>* 当前方式标题栏高度不能自由控制【有待于优化】* 时间:2016/8/9* 作者:vision*/
public abstract class BaseActivity extends Activity {/*** 标题左边文字栏*/private TextView titleLeftTV;/*** 标题左边图像栏*/private ImageView titleLeftIV;/*** 标题标题栏*/private TextView titleNameTV;/*** 标题右边文字栏*/private TextView titleRightTV;/*** 标题右边图像栏*/private ImageView titleRightIV;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic void setContentView(int layoutResID) {View contentView = LayoutInflater.from(this).inflate(layoutResID, null);setContentView(contentView);}@Overridepublic void setContentView(View view) {ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);setContentView(view, lp);}@Overridepublic void setContentView(View view, ViewGroup.LayoutParams lp) {boolean hasTitle = hasTitle();if (hasTitle) {int titleLayoutId = getCustomTitleLayoutId();requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);if (lp == null) {super.setContentView(view);} else {super.setContentView(view, lp);}Window w = getWindow();w.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, titleLayoutId);Drawable titleBg = getTitleBg();ViewGroup titleGroup = (ViewGroup) findViewById(R.id.title_root_group);if (titleBg != null) {titleGroup.addView(titleGroup, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);} else {titleGroup.setBackgroundColor(Color.GREEN);}initTitle();} else {requestWindowFeature(Window.FEATURE_NO_TITLE);if (lp == null) {super.setContentView(view);} else {super.setContentView(view, lp);}}}/*** 初始化View,分三部分:* Left、Center、Right:可以设置图片、文字、点击事件*/private void initTitle() {titleLeftTV = (TextView) findViewById(R.id.title_left_tv);titleLeftIV = (ImageView) findViewById(R.id.title_left_iv);titleNameTV = (TextView) findViewById(R.id.title_name_tv);titleRightTV = (TextView) findViewById(R.id.title_right_tv);titleRightIV = (ImageView) findViewById(R.id.title_right_iv);//下面三个方法根据自己的要求实现;setTitleLeftView(titleLeftTV, titleLeftIV);setTitleNameView(titleNameTV);setTitleRightView(titleRightTV, titleRightIV);}/*** 属性方法形成空实现,子类可重写可不重写*//*** 设置标题栏右标题属性** @param titleRightTV 右标题栏文字* @param titleRightIV 右标题栏图像*/public void setTitleRightView(TextView titleRightTV, ImageView titleRightIV) {}/*** 设置标题栏属性** @param titleNameTV 标题栏标题信息*/public void setTitleNameView(TextView titleNameTV) {}/*** 设置标题栏左标题属性** @param titleLeftTV 左标题文字* @param titleLeftIV 左标题图像*/public void setTitleLeftView(TextView titleLeftTV, ImageView titleLeftIV) {}/*** 是否显示Title,子类可重写** @return*/protected boolean hasTitle() {return true;}/*** Title布局文件;** @return*/protected int getCustomTitleLayoutId() {return R.layout.custom_common_title;}/*** Title背景,子类可以重写;** @return*/protected Drawable getTitleBg() {return null;}}

三、第二种抽取方法

head_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="55dp"android:background="@mipmap/head_bar"><ImageViewandroid:id="@+id/title_bar_back"android:layout_width="32dp"android:layout_height="32dp"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:padding="5dp"android:src="@drawable/back_select" /><TextViewandroid:id="@+id/base_activity_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="方正字体"android:textColor="#FFFFFF"android:textSize="22dp" /><LinearLayoutandroid:id="@+id/base_activity_right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"android:orientation="horizontal"android:padding="5dp" /></RelativeLayout>
</LinearLayout>
NewBaseActivity.java

public abstract class NewBaseActivity extends Activity {/*** 标题中部文字描述*/private TextView titleText;/*** 标题右边View布局*/private LinearLayout rightLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏initCreateView();initView();initData();initLitener();try {View titlebarView = findViewById(R.id.title_bar_back);if (titlebarView != null) {titlebarView.setOnClickListener(new MyBackListener());}} catch (Exception e) {e.printStackTrace();}}private class MyBackListener implements View.OnClickListener {@Overridepublic void onClick(View v) {mySelfDestory();if (getLeftBtn()) {Toast.makeText(NewBaseActivity.this, "您点击了返回!", Toast.LENGTH_SHORT).show();} else {finish();}}}/*** 初始化View*/protected void initView() {//添加右边按钮rightLayout = (LinearLayout) findViewById(R.id.base_activity_right);if (getRightBtn() != null) {rightLayout.addView(getRightBtn());}titleText = (TextView) findViewById(R.id.base_activity_title);if (getTopTitleText() != null) {titleText.setText(getTopTitleText());}}/*** 获取右边自定义按钮,由用户自己定义** @return*/protected View getRightBtn() {return null;}/*** 获取顶部标题** @return*/public abstract String getTopTitleText();/*** 设置布局文件*/public abstract void initCreateView();/*** 初始化数据*/public abstract void initData();/*** 初始化监听器*/public abstract void initLitener();/*** 销毁自我*/private void mySelfDestory() {}/*** 是否获取标题左部按钮** @return*/protected boolean getLeftBtn() {return false;}
}

四、总结

1,展示效果如图


2,说明:

             点击确定--点击返回,均是第一种实现的效果。

             点击跳转新BaseActivity是第二种实现方式。


            很明显的看出第一种实现方式是真的太糙了,第二种方式相对来讲,就是夏日中一泓清泉。

            两种方式展示出来,一是为了看到做出的工作,习惯性给自己一点“甜头”;二是给自己挖一个深坑。在前行的路上,我还有很多东西需要学习、研究。也正是一个个坑的天平逐步让自己强壮一点点。

           给大家推荐第二种,如果你看到,你用就好。要是你喜欢研究,欢迎你来填坑。

                      第一种方式的坑就是:返回或者确定,使用切图展示效果很差;整个头部布局的高度不能自由控制。


戳这里,有惊喜~_~



上班睡觉被抓

“老板,非是本人怠惰因循,实在是这段代码深奥无比。Do与While之间相互勾连,互成太极之势,循环不尽。按照其中指示运行,才发现错误层出不穷。定睛细看,又觉此中分支繁多,仿佛包含所有BUG,各个BUG之间又互成掎角之势。一旦沉迷其中,让人欲昏欲睡,欲仙欲死,几欲脱离红尘,遁入空门。才钻研一根烟的时间,我已心力交瘁,还好香烟燃至食指,才将我惊醒,否则定会耗尽心力而亡。为了避免公司遭受逼死员工的骂名,我才稍息片刻。”

          ----- 做一个小小的二货



这篇关于标题栏的公共抽取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124917

相关文章

poj1330(LCA最近公共祖先)

题意:求最近公共祖先 思路:之前学习了树链剖分,然后我就用树链剖分的一小部分知识就可以解这个题目了,记录每个结点的fa和depth。然后查找时,每次将depth大的结点往上走直到x = y。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo

【UVA】10066-The Twin Towers(最长公共子串问题)

赤裸裸的最长公共子串问题,没什么好说的,注意的是,每组数据后面都有一个空行。 13996019 10066 The Twin Towers Accepted C++ 0.015 2014-08-06 00:34:53 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using

Ubuntu 标题栏实时显示网速CPU内存

1.用 wget 下载 indicator-sysmonitor,终端执行命令: $ wget -c https://launchpad.net/indicator-sysmonitor/trunk/4.0/+download/indicator-sysmonitor_0.4.3_all.deb2.安装依赖: sudo apt-get install python python-psu

MySQL中的`SUBSTRING()`和`MID()`函数:精准抽取字符串中的子串

在数据库操作中,经常需要从存储的字符串中提取出特定的部分,比如从用户全名中提取姓氏、从日期字符串中提取年份等。MySQL提供了SUBSTRING()和MID()两个函数,它们的功能几乎完全相同,都是用来从字符串中抽取子串的。本文将详细介绍这两个函数的用法、参数以及在实际场景中的应用。 一、SUBSTRING()和MID()函数的基本语法 1. SUBSTRING()函数 SUBSTRING(

计算两个字符串的最大公共字符串的长度,字符不区分大小写

/*** */package testString;import java.util.Scanner;/***@author: Administrator*@date: 2016-12-28 下午01:08:30*/public class Main {public static void main(String[] args){Scanner sc=new Scanner(Syste

Python高效计算两个字符串的最长公共子序列

Python高效计算两个字符串的最长公共子序列 在Python面试中,考官通常会关注候选人的编程能力、问题解决能力以及对Python语言特性的理解。计算两个字符串的最长公共子序列(Longest Common Subsequence, LCS)是一个经典的动态规划问题,广泛应用于文本比较、DNA序列分析等领域。本文将详细介绍如何编写一个函数,计算两个字符串的最长公共子序列,确保代码实用性强,条理

NAT技术-将多个内部网络设备映射到一个公共IP地址

问题: 今天上课的时候老师让我们在VMware填同一个子网ip 192.168.196.0,然后给我们的linux镜像都是同一个压缩包,结果我们的静态ip地址都是同一个。 192.168.196.0下面有256个ip地址,范围是192.168.196.0到192.168.196.255。我们几十个人的ip地址怎么会是同一个 linux镜像的ip地址被老师写死了, 1.难道内网的ip可以随便定

第八届蓝桥杯 最大公共子串(动态规划)

标题:最大公共子串 最大公共子串长度问题就是: 求两个串的所有子串中能够匹配上的最大长度是多少。 比如:"abcdkkk" 和 "baabcdadabc", 可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。 下面的程序是采用矩阵法进行求解的,这对串的规模不大的情况还是比较有效的解法。 请分析该解法的思路,并补全划线部分缺失的代码。 #include <stdio.h

CI 添加公共函数 全局函数 自定义函数

CodeIgniter 中公共函数可以通过 helper 辅助函数实现。 创建 common_helper.php 文件,定义所需公共函数,存放至 application/helpers 目录中。 在 application/config/autoload.php 中配置 $autoload[‘helper’] = array(‘common’); 即可。