android开发工作随笔2019.2.27
目录
- 播放音频文件,通过光感原件判断光的强弱进行听筒与喇叭的切换。
- 通过style全局更改文字大小(有此功能需提早做)
- TabLayout与ViewPager使用,customView消失不见的解决方法
- 将下载的图片更新到系统相册
- 关于自己写的startActivity,在oppo、vivo上需要注意的事情
- 关于AppbarLayout的使用
- TabLayout的点击阴影的处理,在api 28也是可以的
播放音频文件,通过光感原件判断光的强弱进行听筒与喇叭的切换。
1.需要音频管理器、设备管理器、光感设备
//音频管理器
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
//设备管理器
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
//光感设备
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
2.实现SensorEventListener接口中的onSensorChanged(SensorEvent event)方法,注册监听器,通过判断event.values[0]中的值来做相应的处理。
//注册
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
//实现onSensorChanged方法@Overridepublic void onSensorChanged(SensorEvent event) {if (event.values[0] <= 50) {//sensor.getMaximumRange()}else{}}
3.通过听筒播放,通过喇叭播放。
//听筒播放
audioManager.setMode(AudioManager.MODE_IN_CALL);audioManager.setSpeakerphoneOn(false);//扬声器外放
audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.setSpeakerphoneOn(true);
所需权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
补充:听筒与扬声器切换播放时,不能从刚才播放的位置继续播放。需要获取一下播放位置,再播放时seekTo。切换时没有声音,需设置setAudioStreamType,setAudioStreamType方法执行需要在 mediaPlayer.prepare()之前。//切换到听筒,需要设置mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);//切换到扬声器,需设置mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);最后一点,硬件设备使用完成后,需要关闭,也就是注销,否侧耗电会增多。mSensorManager.unregisterListener(AudioUtil.this);
通过style全局更改文字大小(有此功能需提早做)
1.有几个字体规格就创建几个style,在dimens.xml中添加dimen。
<style name="AppThemeWhole_Standard" parent="AppThemeWhole"><item name="font_1">@dimen/dp_9</item></style><style name="AppThemeWhole_Small" parent="AppThemeWhole"><item name="font_1">@dimen/dp_8</item></style><style name="AppThemeWhole_Large" parent="AppThemeWhole"><item name="font_1">@dimen/dp_8_half</item></style>
<dimen name="dp_8">8dp</dimen><dimen name="dp_9">9dp</dimen><dimen name="dp_8_half">8.5dp</dimen>
2.创建BaseActivity,让其他Activity继承BaseActivity,并设置布局文件中字体大小。
3.在BaseActivity中的onCreate方法中,通过SharedPreferences判断字体大小,来设置style。
4.在BaseActivity中使用广播接收器或eventbus来重新创建Activity。
简化代码
public class BaseActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {if (fontType == 1) {setTheme(R.style.AppThemeWhole_Standard);} else if (fontType == 2) {setTheme(R.style.AppThemeWhole_Small);} else if (fontType == 3) {setTheme(R.style.AppThemeWhole_Large);}}/*** 使用eventbus来重建activity* @param fontModel*/@Subscribe(threadMode = ThreadMode.MAIN)public void onMessageEvent(FontModel fontModel) {recreate();}@Overrideprotected void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);}
}
设置控件字体的大小。
<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:padding="10dp"android:text="接受"android:textColor="@color/black"android:textSize="?font_1" />
TabLayout与ViewPager使用,customView消失不见的解决方法
setAdapter后再设置CustomView
newsFragmentAdapter = new NewsFragmentAdapter(getChildFragmentManager(), mFragmentList);vp_news.setAdapter(newsFragmentAdapter);tl_news.setupWithViewPager(vp_news);setCustomView();
public void setCustomView() {tl_news.getTabAt(0).setCustomView(layoutInflater.inflate(R.layout.fragment_news_message_title, null));tl_news.getTabAt(1).setCustomView(layoutInflater.inflate(R.layout.fragment_news_friend_title, null));
}
将下载的图片更新到系统相册
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = FileProvider.getUriForFile(DownloadActivity.this, "com.yichen.xuezhifan.FileProvider", new File(downloadPath));
intent.setData(uri);//给图片的绝对路径
sendBroadcast(intent);
关于自己写的startActivity,在oppo、vivo上需要注意的事情
使用自定义的Activity跳转,大部分品牌手机都可以使用,但在oppo、vivo中有一些机型是不行的,需要在intent中加入flag。为确保兼容性,请使用如下代码:
public static void startActivity(Context context) {Intent intent = new Intent(context, BActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}
关于AppbarLayout的使用
这里是AppbarLayout等控件来实现一个微信朋友圈的布局。
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/cl"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.AppBarLayoutandroid:id="@+id/appbarlayout"android:layout_width="match_parent"android:layout_height="300dp"android:background="@android:color/transparent"><!--contentScrim 趋于折叠状态或折叠之后的背景色app:layout_scrollFlags="scroll|exitUntilCollapsed"scroll 随着内容详情一起滚动,exitUntilCollapsed 滚动完成后保留在界面上--><android.support.design.widget.CollapsingToolbarLayoutandroid:id="@+id/collapsing_toolbar_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:contentScrim="@color/white"app:layout_scrollFlags="scroll|exitUntilCollapsed"><!--设置上半部分布局--><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:focusable="true"android:focusableInTouchMode="true"><!--背景图layout_collapseMode:parallax在折叠中产生一定的错位偏移--><ImageViewandroid:id="@+id/img_dddd_bg"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="25dp"android:background="@color/white"android:scaleType="centerCrop"android:src="@mipmap/dddd_bg"app:layout_collapseMode="parallax" /><!--名字--><TextViewandroid:id="@+id/tv_dddd_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@id/img_dddd_bg"android:layout_marginRight="7dp"android:layout_marginBottom="5dp"android:layout_toLeftOf="@id/img_dddd_head"android:paddingRight="3dp"android:shadowColor="@color/black"android:shadowDx="5"android:shadowDy="5"android:shadowRadius="5"android:text="小狐妖"android:textColor="@color/white"android:textSize="14dp"android:textStyle="bold" /><!--头像--><ImageViewandroid:id="@+id/img_dddd_head"android:layout_width="70dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_alignParentBottom="true"android:layout_marginRight="10dp"android:background="@drawable/dddd_head_bg"android:padding="1dp" /></RelativeLayout><!--设置toolbarapp:layout_collapseMode="pin"在折叠过程中位置不变--><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?actionBarSize"android:minHeight="?attr/actionBarSize"android:paddingLeft="10dp"app:contentInsetStart="0dp"app:contentInsetStartWithNavigation="0dp"app:layout_collapseMode="pin"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:layout_width="30dp"android:layout_height="30dp"android:padding="3dp"android:scaleType="centerInside"android:src="@mipmap/arrow_left" /><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:shadowColor="@color/morenhui"android:shadowRadius="5"android:text="信息"android:textColor="@color/white"android:textSize="18dp" /><ImageViewandroid:id="@+id/img_dddd_title_right"android:layout_width="40dp"android:layout_height="40dp"android:layout_alignParentEnd="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"android:paddingEnd="10dp"android:scaleType="fitCenter"android:src="@mipmap/dddd_camera" /></RelativeLayout></android.support.v7.widget.Toolbar></android.support.design.widget.CollapsingToolbarLayout></android.support.design.widget.AppBarLayout><!--设置内容布局和layout_behavior--><android.support.v4.widget.NestedScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior">//这里用webview是为了填充界面<WebViewandroid:id="@+id/webview"android:layout_width="match_parent"android:layout_height="wrap_content" /></android.support.v4.widget.NestedScrollView><!--@string/appbar_scrolling_view_behavior 需要implementation 'com.android.support:design:28.0.0'--></android.support.design.widget.CoordinatorLayout>
如果想修改触发动画的移动高度、去掉过度动画,需要在代码中进行处理。
collapsing_toolbar_layout.setScrimVisibleHeightTrigger(toolbar.getMinimumHeight() + 1);
collapsing_toolbar_layout.setScrimAnimationDuration(0);
折叠后可能有修改toolbar中的空间属性,如:字体颜色、替换图片等。appbarlayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {@Overridepublic void onOffsetChanged(AppBarLayout appBarLayout, int i) {if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {//折叠完成,对字体颜色、图片等进行操作}}});
TabLayout的点击阴影的处理,在api 28也是可以的
在api 28之前,使用 app:tabBackground是可以取消点击的阴影,但在api28上是没有效果的,需要设置app:tabRippleColor属性为透明色才行。
写在最后 |
---|
2018.3入职一家公司,3、4、5、6、7、8月,一共干了6个月,8月底离职,大部分工资没有给(我的青龙偃月刀呢,我要给他剃个头),到2019.1月3、4、5月工资结清。2018年,刚进入这个圈子,就遇到了如此恶心的事情。 |
android开发工作随笔2019.2.27相关推荐
- 2021届毕业生还没找到Android开发工作,看这一篇就够了!
前言 选了开发这一行,就意味着想混得好就要持续学习,你的技术和薪资.位置直接挂钩,进步对于程序员的重要性就不赘述了,接下来作为过来人,为广大同行分享一些学习干货,希望可以帮到大家 应届坎坷求职路 一个 ...
- 看完全都会了!2021届毕业生还没找到Android开发工作,含BATJM大厂
前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司.谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿 ...
- Android开发工作中遇到的重点和难点总结
1. Android N floating widget无法显示.统一管理一个window token解决了此问题. 2. Pop-up window在Android6.0上出现花屏. 3. 由于状态 ...
- Android 开发学习随笔
(一).TextView 1.使用TextView显示文本信息 2.在resources标签下定义常量的标签 3.通过findViewById()方法获取控件对象,此方法返回的是一个View对象,需要 ...
- Android底层开发工作小结
2010 - 微博元年,智能手机元年,2011 - 平板电脑元年,2012 - 智能电视元年. 又到年末,是时候梳理下Android开发工作,展望下未来了. 本文仅供我个人参考... 开发产品 电子书 ...
- 学Android开发 这19个开发工具助你顺风顺水
要想快速开发一个Android应用,通常会用到很多工具,巧妙利用这些工具,能让我们的开发工作事半功倍,节省大量时间,下面大连 Android开发培训小编就为大家介绍下这19个开发工具都有神马用途. 1 ...
- Android开发能够帮你更好开发的19个开发工具
要想快速开发一个Android应用,通常会用到很多工具,巧妙利用这些工具,能让我们的开发工作事半功倍,节省大量时间,下面大连 Android开发培训小编就为大家介绍下这19个开发工具都有神马用途 ...
- Android逆向 学习Android安全和逆向开发的路线总结,android开发平台的发展
学习Android逆向之前,必备条件.[必备,出去面试正经公司的安全岗位都会问的基础问题] 从事3-5年真实的Android开发工作,熟练使用C/C++,Java,kotlin,dart等Androi ...
- 2019 Android开发工程师面经
文章目录 1. Java基础 1.1 什么是乐观锁? 1.2 volatile关键字 1.3 hashmap 原理,红黑树是什么? 1.4 jvm内存分配 1.5 String,StringBuffe ...
最新文章
- EIRP/ERP(有效辐射功率)基本概念
- linux的cat命令
- java参数注解pam_CAS3.4 关于PAM模块SSL的详细配置
- java课题设计实验报告,JAVA简单记事本程序设计实验报告
- javplayer 使用教程_童装裁剪之连衣裙打版教程 有图纸
- 调用百度API,文字转语音
- 如何筹办一场千人技术峰会?
- flashfxp和任务计划自动定时ftp备份
- 运放 - 输出阻抗(Open loop output resistance)Ro
- 华氏温度和摄氏温度的转换-C语言
- 项目二:python爬取豆瓣电影信息并分析
- c 语言怎么实现可视化编程,自定义编程语言的实现
- 浙江杭州烟花爆炸事故中受伤最重者属二级烧伤-杭州-烟花爆炸-烧伤
- Visual Studio 2010 项目属性配置
- Python学习-面向对象(类)
- Codeforces 1244F Chips
- java格式话时间报错java cannot format given object as a date
- 赛车小游戏c语言代码,网页赛车小游戏(纯JavaScript编写)
- 什么是日志审计系统?性价比较高的日志审计系统有哪些?
- 高效能人士的执行四原则(五)——原则4:建立规律问责制
热门文章
- CPU的RISC和CISC架构的区别
- 什么才是真正的中国筷子!
- CSS实现催眠动画效
- html如何给3种渐变色,css中颜色渐变的实现(三种方式)
- 趣味三角——第10章——(sinx)/x
- 基于R语言极值统计学及其在相关领域中的应用
- 湖北2021当阳一中高考成绩查询,湖北宜昌2020高考喜报,夷陵中学六百分上线、一本上线,全市领先...
- 迅雷云加速开放平台学习笔记——实现
- Ansys Electronics Desktop中Illegal external terminal报错
- Cocos Creator 3.x 热更新