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)(易错点以及技术难点攻克) 的相关文章

  • Android 在打开应用程序时会广播吗?

    例如 如果我想知道Youtube何时打开 是否有与之相关的广播 我当然知道我可以轮询 logcat 消息来检查活动 但我可以通过广播来做到这一点吗 因为它会少得多的耗电 此链接似乎表明这是不可能的 如何跟踪 Android 中的应用程序使用
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • FTS3 在 ORMLite 中搜索?

    我对 FTS3 一无所知 除了http developer android com guide topics search search dialog html http developer android com guide topics
  • 安卓定位不准确

    我正在尝试获取当前用户的位置 我试图重构我的代码以获得更好的结果 但我只是不断得到关于准确度的荒谬位置 它在 900 600 米之间 如何才能得到更好的结果 使其精度达到50m以内 这是我的代码 package com agam mapsl
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

    如果我需要能够 播放多个音频文件 具有不同的持续时间 例如 5 到 30 秒 独立设置右 左声道的音量 应用声音效果 如混响 失真 那么 我应该使用哪个 API 另外 我在 AudioTrack API 上找不到太多文档 有谁知道在哪里可以
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 如何在 Android 模块中使用 FirebaseAuth

    我正在开发一个聊天库 我想在其中显示登录用户的对话 制作该库的原因是我想将其集成到多个项目中 我现在面临的问题是FirebaseAuth表示用户尚未登录 FirebaseAuth getInstance mFirebaseApp getCu
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • PhoneStateListener 不调用

    这是我的完整代码 广播示例 java package com example broadcast gt import android app Activity import gt android content Context import
  • 如何在android asynctask中使用inputstream作为参数?

    我正在制作一个 Android 应用程序来跟踪股票详细信息 我将通过 csv 雅虎财经 检索数据 据我所知 在android 4 0中 网络连接无法在主线程上完成 因此 我将使用 asynctask 来建立连接 但是 我在参数方面遇到了一些
  • Android studio - 如何查找哪个库正在使用危险权限?

    我正在尝试将 apk 上传到 google play 商店 但令我惊讶的是 我正在使用以下权限 Your APK is using permissions that require a privacy policy android perm
  • Android:AsyncTask ProgressDialog 将不会在 ActivityGroup 中打开

    我试图在轮询我的服务器时打开一个进度对话框 该类是一个 ActivityGroup 因为它嵌套在选项卡栏中 为了将视图保持在框架内 需要 ActivityGroup 这是我的 ActivityGroup 类的声明 public class
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • 如何在片段中实现 onBackPressed() 和意图?

    我知道 onBackPressed 是活动中的一种方法 但是 我想在片段中使用该功能 以便当按下后退按钮时 它会通过 Intent 重定向到另一个活动 有什么办法解决这个问题吗 public class News Events fragme

随机推荐

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

    小米主题商店中有非常多种类齐全的主题可以下载 无论是免费的还是收费的都是有一堆 不过一些刚刚买小米手机的用户还不清楚小米主题要怎么进行混搭 所以今天就来为大家详细的介绍一下小米主题商店中进行混搭主题的教程 小米主题商店 小米主题怎么混搭 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