目录

  • 播放音频文件,通过光感原件判断光的强弱进行听筒与喇叭的切换。
  • 通过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相关推荐

  1. 2021届毕业生还没找到Android开发工作,看这一篇就够了!

    前言 选了开发这一行,就意味着想混得好就要持续学习,你的技术和薪资.位置直接挂钩,进步对于程序员的重要性就不赘述了,接下来作为过来人,为广大同行分享一些学习干货,希望可以帮到大家 应届坎坷求职路 一个 ...

  2. 看完全都会了!2021届毕业生还没找到Android开发工作,含BATJM大厂

    前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司.谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿 ...

  3. Android开发工作中遇到的重点和难点总结

    1. Android N floating widget无法显示.统一管理一个window token解决了此问题. 2. Pop-up window在Android6.0上出现花屏. 3. 由于状态 ...

  4. Android 开发学习随笔

    (一).TextView 1.使用TextView显示文本信息 2.在resources标签下定义常量的标签 3.通过findViewById()方法获取控件对象,此方法返回的是一个View对象,需要 ...

  5. Android底层开发工作小结

    2010 - 微博元年,智能手机元年,2011 - 平板电脑元年,2012 - 智能电视元年. 又到年末,是时候梳理下Android开发工作,展望下未来了. 本文仅供我个人参考... 开发产品 电子书 ...

  6. 学Android开发 这19个开发工具助你顺风顺水

    要想快速开发一个Android应用,通常会用到很多工具,巧妙利用这些工具,能让我们的开发工作事半功倍,节省大量时间,下面大连 Android开发培训小编就为大家介绍下这19个开发工具都有神马用途. 1 ...

  7. Android开发能够帮你更好开发的19个开发工具

     要想快速开发一个Android应用,通常会用到很多工具,巧妙利用这些工具,能让我们的开发工作事半功倍,节省大量时间,下面大连 Android开发培训小编就为大家介绍下这19个开发工具都有神马用途 ...

  8. Android逆向 学习Android安全和逆向开发的路线总结,android开发平台的发展

    学习Android逆向之前,必备条件.[必备,出去面试正经公司的安全岗位都会问的基础问题] 从事3-5年真实的Android开发工作,熟练使用C/C++,Java,kotlin,dart等Androi ...

  9. 2019 Android开发工程师面经

    文章目录 1. Java基础 1.1 什么是乐观锁? 1.2 volatile关键字 1.3 hashmap 原理,红黑树是什么? 1.4 jvm内存分配 1.5 String,StringBuffe ...

最新文章

  1. EIRP/ERP(有效辐射功率)基本概念
  2. linux的cat命令
  3. java参数注解pam_CAS3.4 关于PAM模块SSL的详细配置
  4. java课题设计实验报告,JAVA简单记事本程序设计实验报告
  5. javplayer 使用教程_童装裁剪之连衣裙打版教程 有图纸
  6. 调用百度API,文字转语音
  7. 如何筹办一场千人技术峰会?
  8. flashfxp和任务计划自动定时ftp备份
  9. 运放 - 输出阻抗(Open loop output resistance)Ro
  10. 华氏温度和摄氏温度的转换-C语言
  11. 项目二:python爬取豆瓣电影信息并分析
  12. c 语言怎么实现可视化编程,自定义编程语言的实现
  13. 浙江杭州烟花爆炸事故中受伤最重者属二级烧伤-杭州-烟花爆炸-烧伤
  14. Visual Studio 2010 项目属性配置
  15. Python学习-面向对象(类)
  16. Codeforces 1244F Chips
  17. java格式话时间报错java cannot format given object as a date
  18. 赛车小游戏c语言代码,网页赛车小游戏(纯JavaScript编写)
  19. 什么是日志审计系统?性价比较高的日志审计系统有哪些?
  20. 高效能人士的执行四原则(五)——原则4:建立规律问责制

热门文章

  1. CPU的RISC和CISC架构的区别
  2. 什么才是真正的中国筷子!
  3. CSS实现催眠动画效
  4. html如何给3种渐变色,css中颜色渐变的实现(三种方式)
  5. 趣味三角——第10章——(sinx)/x
  6. 基于R语言极值统计学及其在相关领域中的应用
  7. 湖北2021当阳一中高考成绩查询,湖北宜昌2020高考喜报,夷陵中学六百分上线、一本上线,全市领先...
  8. 迅雷云加速开放平台学习笔记——实现
  9. Ansys Electronics Desktop中Illegal external terminal报错
  10. Cocos Creator 3.x 热更新