android开发笔记(1-5)(易错点以及技术难点攻克)

2023-11-12

1.scrollview中嵌套有listview或者gridview,从其他页面返回到这个页面,焦点总是跑到listview或者gridview上

解决办法:重写scrollview的下边方法

@Override
	protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
		return 0;
	}

2.webview清除缓存的方法:

webview.clearCache(true);
webview.clearHistory();

3.图片和文字的组合显示可以使用下边方法:

<TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="12dp"
            android:drawableLeft="@drawable/meal"
            android:drawablePadding="15dp"
            android:gravity="center_vertical"
            android:text="推荐"
            android:textColor="@color/default_left_content_color" />

4.图片底部写文字,可以用下边的办法:


/**
 * 带文字的图片
 */

public class TextImageView extends ImageView {

	protected Context mContext;
	private float textSize; // 文字大小
	private String text;

	private Paint paint;
	private TextPaint textPaint;
	private TextImageView textImageView;

	public TextImageView(Context context) {
		super(context);
		this.textImageView = this;
		init(context);
	}

	public TextImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		this.textImageView = this;
		init(context);
	}

	public TextImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.textImageView = this;
		init(context);
	}

	/**
	 * @param context
	 */
	private void init(Context context) {
		this.mContext = context;
		paint = new Paint();
		paint.setColor(Color.parseColor("#7f000000")); // 颜色
		paint.setStyle(Paint.Style.FILL);
		paint.setStrokeWidth(5);

		textPaint = new TextPaint();// 初始化画笔,为后面文字使用。
		textPaint.setAntiAlias(true);// 去除锯齿。
		try {
			textPaint.setTextSize(mContext.getResources().getDimension(
					R.dimen.size_28px)); // 设置文字大小
			
		} catch (Exception e) {
		}
		textPaint.setColor(Color.WHITE); // 颜色
		textPaint.setTextAlign(Paint.Align.CENTER);
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		// 画边框
		Rect rec = canvas.getClipBounds();
		int top = rec.bottom;
		int left = rec.left;
		int right = rec.right;
		int bottom = rec.bottom;

		RectF rectf = new RectF(left, 0.8f * top, right, bottom);
		canvas.drawRect(rectf, paint);
		int textWidth = 0;
		try {
			textWidth = (int) textPaint.measureText(text);// 获取字体的宽度
		} catch (Exception e) {
		}
		String ellipsizeStr = "";
		int boottomtextWidth = getMeasuredWidth() - 15;
		if (textWidth > boottomtextWidth) {
			ellipsizeStr = (String) TextUtils.ellipsize(text, textPaint,
					boottomtextWidth, TextUtils.TruncateAt.END);
		} else {
			ellipsizeStr = text;
		}
		if (StringTools.isNotEmpty(ellipsizeStr)) {
			canvas.drawText(ellipsizeStr, 0.5f * right, 0.95f * top, textPaint);
		}

	}

	public float getTextSize() {
		return textSize;
	}

	public void setTextSize(float textSize) {
		this.textSize = textSize;
	}

	public String getText() {
		return text;
	}

	public void setTitle(String text) {
		this.text = text;
	}

	public void setImage(String picUrl) {
		AsynImageLoader.getInsatnce(mContext).showImageAsyn(this.textImageView,Format.null2Blank(picUrl));
	}

}

5.Activity中viewpager嵌套多个子activity,子activity生命周期的调用

       protected LocalActivityManager manager = null;
       ...
       manager = new LocalActivityManager(this, true);
       ...
       @Override
	public void onResume() {
		super.onResume();
		dealPreviousActivity(lastIndex + 1, false);
	}

	@Override
	protected void onStop() {
		dealPreviousActivity(1, true);
		super.onStop();
	}

	private void dealPreviousActivity(int index, boolean isOnStop) {
		if (manager != null) {
			Activity _activity = manager.getActivity("" + index);
			if (_activity == null)
				return;
			if (_activity instanceof HomeActivity) {
				if (isOnStop)
					((HomeActivity) _activity).goneOnScreen();
				else
					((HomeActivity) _activity).invisibleOnScreen();
			}
		}
	}





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android开发笔记(1-5)(易错点以及技术难点攻克) 的相关文章

随机推荐

  • 小米主题显示服务器不可用,小米主题商店 小米主题怎么混搭

    小米主题商店中有非常多种类齐全的主题可以下载 无论是免费的还是收费的都是有一堆 不过一些刚刚买小米手机的用户还不清楚小米主题要怎么进行混搭 所以今天就来为大家详细的介绍一下小米主题商店中进行混搭主题的教程 小米主题商店 小米主题怎么混搭 1
  • JAVA 通过浏览器下载大文件导致OOM

    背景 Response 获取的对象为 ContentCachingResponseWrapper 页面点击下载文件 后台报错如下 org springframework web util NestedServletException Han
  • 关于oss使用sts 后台签发临时token前端直传大文件的错误记录

    文章目录 前言 遇到的问题 1 NoSuchBucket The specified bucket does not exist 2 com aliyuncs exceptions ClientException InvalidParame
  • tp5的分页方法 paginate

    tp5的分页方法paginate 一共有三个参数 其中 listRows可以为整型或者数组 当是数组的时候 你传入的 config就会失效 原因是 paginate的源代码 所以说 如果你想重新配置参数 那 listRows就传数组 否则的
  • 【ffmpeg基础】视频滤波处理

    ffmpeg版本 ffmpeg version 5 1 2 Copyright c 2000 2022 the FFmpeg developers 一 视频缩放滤波器 视频的滤波器通常使用 vf video filters 来设置滤波器 也
  • GDI 绘图

    目录 GDI 绘图 画点 画线 画封闭图形 画笔 画刷 其他 DC Device Context 绘图设备 HDC 绘图设备句柄 GDI Microsoft Graphics Device Interface Win32提供的绘图API G
  • python变量与作用域

    变量从作用域分类 作用范围从小到大为 小作用域的可以调用大作用域的内容 局部 Local 闭包 Enclosing 全局 Global 内建 Build in 局部变量 局部变量是定义在函数中的 因此其作用域是在函数内部 def examp
  • Opencv2.4.2+vs2008+windowsXP(32位)安装过程

    Opencv2 4 2 vs2008 windowsXP 32位 安装过程 准备软件 opencv2 4 2 VS2008软件 1 解压opencv2 4 2到指定路径 例如 D Program Files OpenCV2 4 2 2 打开
  • Https + OPENSSL

    二 HTTPS 2 1 HTTPS介绍 先来看HTTPS的概念 我们一般的http走的是80端口 而https走的是443端口 有什么不一样的地方吗 很简单 我们拿个telnet命令来作个实验 telnet127 0 0 1 80 直接就登
  • Vue.js(四)

    Vue js 模板语法 Vue js 使用了基于 HTML 的模版语法 允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 Vue js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统 结合响应系统 在
  • two.js插件的简单用法

    div div
  • linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)

    PATH和LD LIBRARY PATH本质都是变量 所谓变量的意思就是由别人赋值产生的 直觉往往会让我们添加和减少这个变量本身的某些路径 实际上这是不正确的 正确的做法是我们要去修改赋予这个变量数值的那些配置文件 加一条路径或者减一条 说
  • pageoffice 骑缝章_PageOffice 页面中打开office编辑文档

    pom xml com zhuozhengsoft pageoffice 4 5 0 6 web xml poserver com zhuozhengsoft pageoffice poserver Server poserver pose
  • FDFS_Ubuntu部署fdfs测试上传文件不成功

    开启服务 sudo service fdfs trackerd start sudo service fdfs storaged start 查看服务是否开启 ps aux grep fdfs 执行完上述的操作之后 在ps 命令中完美显示开
  • 字符串相关,可变长字符串,异常

    字符串相关 String 字符串常量 本质char String str1 abc String str2 abc System out prrintln str1 str2 同时也会带来这样的问题 String a a a a b ab
  • Vue axios的使用

  • cmake知识点总结

    CMake的所有的语句都写在一个叫 CMakeLists txt 的文件中 当 CMakeLists txt 文件确定后 可以用 ccmake 命令对相关的变量值进行配置 这个命令必须指向 CMakeLists txt 所在的目录 配置完成
  • 操作系统_第四章_存储管理之 页式存储管理

    思考一个问题 是否有可能把相对地址连续的作业信息分散存放到几个不连续的主存区域中 且仍然能保证作业正确执行 若可行的话 既可充分利用主存空间又可减少移动所花费的开销 页式存储管理就是这样的管理方式 一 页式存储管理的基本原理 定义 页式存储
  • Vue3打包后无法运行

    描述 使用Vue3打包项目后 使用Live Server打开无法运行 放到服务器上也是一样 如图所示错误 分析 错误提示为js文件未找到 所以可能是路径的问题 关于Vue公共基础路径问题 https cn vitejs dev guide
  • android开发笔记(1-5)(易错点以及技术难点攻克)

    1 scrollview中嵌套有listview或者gridview 从其他页面返回到这个页面 焦点总是跑到listview或者gridview上 解决办法 重写scrollview的下边方法 Override protected int