【笔记】四月天


1、 安卓源码查看网站:http://www.grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android-apps/

2、ToaggleButton:开关按钮
   效果较炫酷的开关按钮,就是还没发现怎么去控制图片的大小,所以还是不要去常用!
   toaggleButton.setOnCheckedChanfeListener(new OnCheckedChangeListener(){
       @Override
            public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
                if(isChecked){
                    //打开状态
                }else{
                  //关闭状态
                }
                }
        });   

3、#给RelativeLayout添加监听点击事件,需要在布局里添加以下两个属性,其他布局同理;
   android:clickable="true"
   android:focusable="true"
   #添加点击后的系统点击声音:
   relativeLayout.playSoundEffect(android.view.SoundEffectConstants.CLICK);

4、android多国语言文件夹文件汇总如下:
Arabic, Egypt (ar_EG) -----------------------------阿拉伯语,埃及
Arabic, Israel (ar_IL) -------------------------------阿拉伯语,以色列
Bulgarian, Bulgaria (bg_BG) ---------------------保加利亚语,保加利亚
Catalan, Spain (ca_ES) ---------------------------加泰隆语,西班牙
Czech, Czech Republic (cs_CZ) -----------------捷克语,捷克共和国
Danish, Denmark(da_DK) ------------------------丹麦语,丹麦
German, Austria (de_AT) -------------------------德语,奥地利
German, Switzerland (de_CH) -------------------德语,瑞士
German, Germany (de_DE) ----------------------德语,德国
German, Liechtenstein (de_LI) ------------------德语,列支敦士登的
Greek, Greece (el_GR) ----------------------------希腊语,希腊
English, Australia (en_AU) -------------------------英语,澳大利亚
English, Canada (en_CA) --------------------------英语,加拿大
English, Britain (en_GB) ----------------------------英语,英国
English, Ireland (en_IE) -----------------------------英语,爱尔兰
English, India (en_IN) --------------------------------英语,印度
English, New Zealand (en_NZ) ---------------------英语,新西兰
English, Singapore(en_SG) --------------------------英语,新加坡
English, US (en_US) -----------------------------------英语,美国
English, Zimbabwe (en_ZA) --------------------------英语,津巴布韦
Spanish (es_ES) ----------------------------------------西班牙
Spanish, US (es_US) -----------------------------------西班牙语,美国
Finnish, Finland (fi_FI) ---------------------------------芬兰语,芬兰
French, Belgium (fr_BE) -------------------------------法语,比利时
French, Canada (fr_CA) -------------------------------法语,加拿大
French, Switzerland (fr_CH) --------------------------法语,瑞士
French, France (fr_FR) --------------------------------法语,法国
Hebrew, Israel (he_IL) ---------------------------------希伯来语,以色列
Hindi, India (hi_IN) -------------------------------------印地语,印度
Croatian, Croatia (hr_HR) ----------------------------克罗地亚语,克罗地亚
Hungarian, Hungary (hu_HU) ------------------------匈牙利语,匈牙利
Indonesian, Indonesia (id_ID) ------------------------印尼语,印尼
Italian, Switzerland (it_CH) ----------------------------意大利语,瑞士
Italian, Italy (it_IT) ---------------------------------------意大利语,意大利
Japanese (ja_JP) ----------------------------------------日语
Korean (ko_KR) ------------------------------------------朝鲜语
Lithuanian, Lithuania (lt_LT) --------------------------立陶宛语,立陶宛
Latvian, Latvia (lv_LV) ---------------------------------拉托维亚语,拉托维亚
Norwegian-Bokmol, Norway(nb_NO) ---------------挪威语,挪威
Dutch, Belgium (nl_BE) --------------------------------荷兰语,比利时
Dutch, Netherlands (nl_NL) ---------------------------荷兰语,荷兰
Polish (pl_PL) -------------------------------------------波兰
Portuguese, Brazil (pt_BR) ---------------------------葡萄牙语,巴西
Portuguese, Portugal (pt_PT) ------------------------葡萄牙语,葡萄牙
Romanian, Romania (ro_RO) ------------------------罗马尼亚语,罗马尼亚
Russian (ru_RU) ----------------------------------------俄语
Slovak, Slovakia (sk_SK) ------------------------------斯洛伐克语,斯洛伐克
Slovenian, Slovenia (sl_SI) ---------------------------斯洛文尼亚语,斯洛文尼亚
Serbian (sr_RS) ----------------------------------------塞尔维亚语
Swedish, Sweden (sv_SE) ----------------------------瑞典语,瑞典
Thai, Thailand (th_TH) --------------------------------泰语,泰国
Tagalog, Philippines (tl_PH) --------------------------菲律宾语,菲律宾
Turkish, Turkey (tr_TR) -------------------------------土耳其语,土耳其
Ukrainian, Ukraine (uk_UA) --------------------------联合王国
Vietnamese, Vietnam (vi_VN) -----------------------越南语,越南
Chinese, PRC (zh_CN)--------------------------------中文,中国
Chinese, Taiwan (zh_TW)-----------------------------中文,台湾

5、改变系统时间的权限:
   在清单配置文件manifest中,添加:android:sharedUserId="android.uid.system";
   但在安装的过程中发现无法安装程序,可能该应用获取的权限过大,在eclipse中无法编译,于是我就放到服务器里编译,然后就成功实现了功能!

6、 旋转屏幕:
   if(getrot(this) != 90f)
     {
         Intent intentRotated = new Intent("com.ATCSetting.mainui.rotationservice");
         intentRotated.putExtra("screen_rotated", true);
         startService(intentRotated);
     }

7、返回键获取:
   之前一个自己的一个项目里,因为在如下代码中没加return true,导致没有中断系统的操作,在主页的小分页里点击返回后先显示需要返回的状态后,程序直接退出!
   public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

8、操作项目的三个问题:
   #、viewpager的每个页面滑动切换回来,页面会显示是上次滑动的位置;怎么让页面滑动的时候都是显示在顶端?
      scrollTo(0, 0);
   #、gridview是viewpager的一个页面,gridview的每个item放的是一个scollview页面,当打开第一个scollview页面滑动动后,返回再打开第二个scollview页面会发现这个页面显示位置跟第一个页面返回前停留的位置一样!怎么让每次打开页面的时候,都显示在顶端?
      scrollTo(0, 0);
   #、gridview和scollview页面首次打开时,不动的话不能获取不到页面的高度值,怎么才能静态获取?
      给页面设置了scrollTo(0, 0);后
      发现每次打开新srollview页面都会执行ScrollView.getY();方法:且值为0,那么剩下的事就简单了!
      项目中的各种冲突问题是Gridview引起的!

9、设置界面问到的访问另一个activitry的view控件的方法:
   首先在MainActivity.class:
   public static View tThis;
   ...
   tThis = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null);
        setContentView(tThis);

    OntherActivity.class:
    toggleButton_radio_key=(ToggleButton)MainActivity.tThis.findViewById(R.id.toggleButton_radio_key);

10、setBounds():的作用
   setBounds(
   left :组件在容器X轴上的起点
   top :组件在容器Y轴上的起点
   right :组件的长度
   bottom :组件的高度
   );

11、listView优化:
   public View getView(int position,Viewconvert View,ViewGroup parent)  {
        ViewHolderholder;
   if(convertView==null){
   convertView=LayoutInflater.from(context).inflate(R.layout.section_list_item1,null);
   holder=newViewHolder();
   holder.tv_name=(TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_name);
   holder.tv_phone=(TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_phoneNum);
   convertView.setTag(holder);
   } else {
   holder=(ViewHolder)convertView.getTag();
   }
   ContactInfo1confo=contacts.get(position);
   Log.i("my","confo"+confo.getContactName());
   if(confo!=null){//toseteveryitem'stext
   holder.tv_name.setText(confo.getContactName());
   holder.tv_phone.setText(confo.getContact_Phone());
   }
   returnconvertView;
   }
   classViewHolder
  {
  TextViewtv_name,tv_phone;
  }

12、textView滚动显示:
  一.TextView基础
   TextView实现文字滚动需要以下几个要点:
  1.文字长度长于可显示范围:android:singleLine="true"
  2.设置可滚到,或显示样式:android:ellipsize="marquee"
  3.TextView只有在获取焦点后才会滚动显示隐藏文字,因此需要在包中新建一个类,继承TextView。重写isFocused方法,这个方法默认行为是,如果TextView获得焦点,方法返回true,失去焦点则返回false。跑马灯效果估计也是用这个方法判断是否获得焦点,所以把它的返回值始终设置为true。

  TextView属性介绍:
  ellipsize属性
  设置当文字过长时,该控件该如何显示。有如下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)
  marqueeRepeatLimit属性
  在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。
  focusable属性
  能否获得焦点,同样focusableInTouchMode是滑动时能否获得焦点。
二.实现
 1、在frameworks\base\core\java\android\widget\下创建AlwaysMarqueeTextView.java,内容如下:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package android.widget; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.TextView; 
import android.widget.RemoteViews.RemoteView; 
@RemoteView 
public class AlwaysMarqueeTextView extends TextView { 
public AlwaysMarqueeTextView(Context context) { 
 super(context); 
public AlwaysMarqueeTextView(Context context, AttributeSet attrs) { 
 super(context, attrs); 
public AlwaysMarqueeTextView(Context context, AttributeSet attrs, 
  int defStyle) { 
 super(context, attrs, defStyle); 
@Override 
public boolean isFocused() { 
 return true; 
2、执行update-api的命令:
./mk update-api
3、重新编译整个工程
4、修改相应的TextView控件
[html] view plain copy 在CODE上查看代码片派生到我的代码片
    <TextView   
   <AlwaysMarqueeTextView   
         android:id="@+id/item_title"   
         android:layout_width="match_parent"   
         android:layout_height="wrap_content" 
         android:layout_toRightOf="@id/item_icon" 
         android:layout_marginBottom="6dip" 
         android:textAppearance="?android:attr/textAppearanceMedium" 
         android:focusableInTouchMode="true" 
         android:singleLine="true" 
         android:ellipsize="none" 
         android:ellipsize="marquee" 
         android:marqueeRepeatLimit="marquee_forever" 
         /> 

13、判断两个字符是否一样:
    textView1.getText().toString().equals(textView2.getText().toString());

14、switch中的default,一般用在最后,表示非以上的任何情况下而发生的情况,我们一般习惯在他的后面加上个break;
    如果放在非最后的位置,用途也是一样!

15、判断ImagerView的src是否为指定图片,点击变换图片的方法:
    image[0].getDrawable().getCurrent().getConstantState().equals(getResources().
                        getDrawable(R.drawable.ios7_switch_off).getConstantState())

16、spinner:
    android:entries="@array/array_2" 添加选项
    setSelection(int index);设置选中项
    spinner.SetOnItemSelectedListener:获取选中项方法

17、高八位和低八位:
    比如整形数 int型的65535
    二进制为16个1
    1111 1111 1111 1111
    由后往前数,先数的八个1所占的位就属于低八位,后数到的八个1所占的八位就属于高八位。       

18、EditText.getSelectionStart();获取光标的位置

    Editable etext = inputField.getText();
    int position = etext.length();
    Selection.setSelection(etext, position);
    可以将光标移动到EditText文本的右边。 

    不弹出软键盘:
    text_call_info.setInputType(InputType.TYPE_NULL);
        text_call_info.setText(""); 

        *editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)});  //其中100最大输入字数
        *android:maxLength="100"

19、开机动画广播:
    <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>       
    监听这个广播就会监听开机状态

20、(1)当系统设为阿拉伯文整体文字都会从右到左,但有些是不要的,要从左到右:apps\Launcher2\res\layout-landlauncher.xml  23行增加: 
     android:layoutDirection="ltr" 即可,意为消除语言对布局的影响!
    (2)Locale locale = new Locale("America/Los_Angeles"); ===数字和时钟等都不用反。设为本地码Los_Angeles
      DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
      Format = new DecimalFormat(".00",symbols);   

    系统标题栏更改时间的显示:
    /home/jbd_lingf/mtk8317/r020_v0229/autochips/frameworks/base/packages/SystemUI
    autochips/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    TextView time_text = (TextView) mStatusBarWindow.findViewById(R.id.f_time);
      TextView time_text = (TextView) mStatusBarWindow.findViewById(R.id.f_time);
      TextView maohao_text = (TextView) mStatusBarWindow.findViewById(R.id.f_maohao);
      TextView ampm_text = (TextView) mStatusBarWindow.findViewById(R.id.f_ampm);
              //llf add begin 2016.03.14阿拉伯文收音挂件显示,调用本地码函数。
                    Locale locale = new Locale("America/Los_Angeles");
                    DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
                    Format = new DecimalFormat("00",symbols);
                //llf add end 2016.03.14

       //llf add begin 2016.03.22阿拉伯文收音挂件显示,调用本地码函数。 PhoneStatusBar.java  lines:2958
                    Locale locale1 = new Locale("America/Los_Angeles");
                    SimpleDateFormat dateFormat24 = new SimpleDateFormat(" HH:mm", locale1);
                    SimpleDateFormat dateFormat12 = new SimpleDateFormat(" hh:mm", locale1);
                    Long long1 = System.currentTimeMillis();
                    if(b24) time = dateFormat24.format(long1);
                    else time = dateFormat12.format(long1);

      位置:/home/jbd_lingf/mtk8317/hd7010out_v0229

21、桌面快捷圆点按钮要跟随工程设置里选择不同的车型配置变化,由于是两个不同的程序,需要跨进程,我在工程设置跟随选择的车型发送对应的广播出来,在圆点按钮程序里注册广播
    ,接收发过来的广播对应进行判断隐藏与显示!
    槽点:1、设置车型页面写在Fragment里,不能直接sendBroadcast(intent);起先是写成CarSetup.this.getActivity().sendBroadcast(intent);然后就被坑了一天,因为造这个方法发出来的数据值全为null;
          直到经过我在写一对一模一样的广播的发与收的程序出来测试,排除了所有的可能错误性最终才筛查到这!最终改成getActivity().sendBroadcast(intent);然后才豁然开朗!
          2、圆点按钮程序接收到广播,判断后一直无法显示与隐藏桌面图标,在所有可能出错的地方打了log,最终确定是ImageView.setVisibility(View.INVISIBLE);无法执行,这下就犯难了,
          .setVisibility(View.INVISIBLE);可是用过无数次都不会出错的!磨磨蹭蹭地有崩溃性地试了几个小时,想想是不是因为是引用的另一个程序的控件id,问了基平后,直接找到那个浮动窗口去控制,
          MyWindowManager.smallWindow.setVisibility(View.INVISIBLE); 然后就可以了!
          3、启动判断功能:这个又把我困住,因为每次开机都要根据之前的选择进行开机判断,最终的解决方法是使用的SharedPreferences preferences = context.getSharedPreferences("index", Context.MODE_PRIVATE);
          然后在浮动窗口的Java文件里加:private static boolean getDataFromSharePre();判断方法,

22、SharedPreferences:轻量级的储存 保存用户的某些settings值等  http://www.cnblogs.com/zhaoxiaowei/p/3733272.html
    SharedPreferences preferences = context.getSharedPreferences("index", Context.MODE_PRIVATE);     

23、修改版本号:
    autochips/packages/apps/ATCSetting/src/com/ATCSetting/mainui/VersionsFragment.java
    version.setText(ver.subSequence(0, 35).toString());

24、动态状态栏的显示与隐藏:
    View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐藏的操作,以及获取状态栏当前可见性。
    setSystemUiVisibility(int visibility)方法可传入的实参为:
    1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。
    2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。
    3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。
    4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。
    5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。
    8. View.SYSTEM_UI_FLAG_LOW_PROFILE:状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。

你可能感兴趣的:(【笔记】四月天)