Android 4.4拨号,短信,联系人源码修改(一)

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui


最近部门没什么大的需求要改,就让我们改一下Android 4.4的拨号器,联系人以及短信源码。以微信电话本为蓝本,进行布局定制和功能完善。我主要负责拨号模块,涉及拨号面板,通话记录和通话详情这几个修改点。到今天差不多已经完成,下面总结一下过程中遇到的一些问题以及解决步骤:

相应模块实现功能:

①通话记录:运营商显示,ListView条目向右滑动拨号、向左滑动发短信,相同联系人记录合并,

②通话详情:号码归属地显示,联系人标星收藏,加入黑名单来电拦截,显示联系人头像,发送名片,通话记录显示最近5条,超过5条显示More按钮,点击可查看全部记录

======================================================================================================

1.将服务器目录挂载到本地:

  1. sshfs zhoumushui@168.168.0.55:../zhoumushui localcode/
sshfs zhoumushui@168.168.0.55:../zhoumushui  localcode/


2.源码布局分析
res/layout/diapad.xml
包括数字1-9,0,*,#以及对应英文字母。
res/layout/diapad_key.xml
数字0-9的,*,#,字母的属性,大小和颜色
res/layout/dialpad_fragment.xml
包括拨号面板的号码输入框,退格。下面链接dialpad.xml。下面是通话记录,拨号键,overflow menu
res/layout/dialtacts_activity.xml
打开拨号的默认界面,未呼出dialpad
res/layout/phone_no_favorites.xml
文字提示“您收藏的联系人和经常通话的……”,“所有联系人”按钮
res/layout/call_log_fragment.xml
通话记录的过滤查看(全部,来电,去电,未接)按钮
res/layout/call_log_list_item.xml
(拨号首页)通话记录具体条目内容:头像QuickPhoto,名字Name,标签Label,通话类型call_type,通话时长和日期call_count_and_date,secondary_action_icon,
res/layout/call_detail.xml
通话详情界面,包括main_action_push_layer,header_text,main_action,call_and_sms_action等。
res/layout/mtk_dialer_search_item_view.xml
拨号界面输入号码后,页面上端匹配联系人条目的布局文件,包括qucik_contact_photo, name, labelAndNumber等。
res/menu/call_log_options.xml
通话记录列表actionBar上的操作按钮:选择资源,删除。
com/android/dialer/PhoneCallDetailsView.java
显示通话记录条目的具体内容:包括name,callTyepe,callTypeIcons,call_count_and_date,label

3.编译命令
整体编译:

  1. ./mk -t -l=*** -o=TARGET_BUILD_VARIANT=*** n
./mk -t -l=*** -o=TARGET_BUILD_VARIANT=*** n

-t表示打印出编译log信息
模块编译:
  1. ./mk -t mm packages/apps/Dialer
./mk -t mm packages/apps/Dialer

输出文件夹:
  1. out/target/product/***/system/priv-app/Dialer.apk
out/target/product/***/system/priv-app/Dialer.apk


4.adb的一些操作

  1. adb push xxxx.apk /system/app 将应用程序的apk文件push到手机中
  2. adb install xxxx.apk 安装app
  3. adb install -r ~/Dialer.apk //-r 表示强制安装
adb push xxxx.apk /system/app     将应用程序的apk文件push到手机中
adb install xxxx.apk    安装app
adb install -r ~/Dialer.apk      //-r 表示强制安装


5.".9.png"图片原理和制作
左侧和上方的黑线交叉的部分即可扩展区域
右侧和下方的黑线交叉的部分即内容显示区域(如做button背景图时,button上文字的显示区域)

6.让Android4.0以上机器的虚拟按键中显示menu键
在Activity的onCreate中设置flag:

  1. getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY,WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY,WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY); 

7.Visibility的三种属性
1) 可见(visible)
XML文件:android:visibility="visible"
Java代码:view.setVisibility(View.VISIBLE);
2) 不可见(invisible)
XML文件:android:visibility="invisible"
Java代码:view.setVisibility(View.INVISIBLE);
3) 隐藏(GONE)
XML文件:android:visibility="gone"
Java代码:view.setVisibility(View.GONE);


8.去掉ListView的分割线
去掉分割线,把divider的颜色设为透明就行:android:divider="#00000000"
点击之后不让被点击项变成橘黄色:android:listSelector="#00000000"


9.setClickable,setFocusable
setClickable()控制按钮是否可以被点击和点击之后触发监听器事件。
setFocusable()控制键盘是否可以获得这个按钮的焦点。


10.寻找文件中关键字

  1. find -name "*.java" | xargs grep -n "ic_phone_dk"// 寻找代码文件中的关键字
  2. find -name "*.xml" | xargs grep -n "ic-phone_dk"// 寻找布局文件中的关键字
find -name "*.java" | xargs grep -n "ic_phone_dk"// 寻找代码文件中的关键字
find -name "*.xml"  | xargs grep -n "ic-phone_dk"// 寻找布局文件中的关键字



11.去掉Activity间的跳转动画
①在values文件夹的styles.xml文件里面新建一个style

  1. <style name="AlexNoAniTheme" parent="android:Theme">
  2. <item name="android:windowAnimationStyle">@style/noAnimation</item>
  3. <item name="android:windowNoTitle">true</item></style>
  4. <style name="noAnimation">
  5. <item name="android:activityOpenEnterAnimation">@null</item>
  6. <item name="android:activityOpenExitAnimation">@null</item>
  7. <item name="android:activityCloseEnterAnimation">@null</item>
  8. <item name="android:activityCloseExitAnimation">@null</item>
  9. <item name="android:taskOpenEnterAnimation">@null</item>
  10. <item name="android:taskOpenExitAnimation">@null</item>
  11. <item name="android:taskCloseEnterAnimation">@null</item>
  12. <item name="android:taskCloseExitAnimation">@null</item>
  13. <item name="android:taskToFrontEnterAnimation">@null</item>
  14. <item name="android:taskToFrontExitAnimation">@null</item>
  15. <item name="android:taskToBackEnterAnimation">@null</item>
  16. <item name="android:taskToBackExitAnimation">@null</item></style>
<style name="AlexNoAniTheme" parent="android:Theme">
<item name="android:windowAnimationStyle">@style/noAnimation</item>
<item name="android:windowNoTitle">true</item></style>
<style name="noAnimation">
<item name="android:activityOpenEnterAnimation">@null</item>
<item name="android:activityOpenExitAnimation">@null</item>
<item name="android:activityCloseEnterAnimation">@null</item>
<item name="android:activityCloseExitAnimation">@null</item>
<item name="android:taskOpenEnterAnimation">@null</item>
<item name="android:taskOpenExitAnimation">@null</item>
<item name="android:taskCloseEnterAnimation">@null</item>
<item name="android:taskCloseExitAnimation">@null</item>
<item name="android:taskToFrontEnterAnimation">@null</item>
<item name="android:taskToFrontExitAnimation">@null</item>
<item name="android:taskToBackEnterAnimation">@null</item>
<item name="android:taskToBackExitAnimation">@null</item></style>


②在AndroidManifest.xml中修改相应Activity的theme
  1. <activity android:name=".HomeActivity"
  2. android:label="@string/app_name"
  3. android:theme="@style/AlexNoAniTheme">
<activity android:name=".HomeActivity" 
android:label="@string/app_name" 
android:theme="@style/AlexNoAniTheme"> 


或者将 <item name="android:windowAnimationStyle">@style/noAnimation</item>加入Activity原来的theme
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值