最近总结的android疑惑(二)

来源:互联网 发布:淘宝云建站不能用了吗 编辑:程序博客网 时间:2024/05/29 07:56

            解决popupwindow中弹出输入法被遮挡问题,在Popupwindow中有EditText,当点选EditText后输入法在popupwindow后面显示了,其实在popupwindow中有个输入法配置选项。最关键就是设置输入模式 就是这里

nava_home_popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); 

这样就可以让popupWindow显示在最前面而不受软键盘的影响。


获取联系人头像:

ContentResolver cr = view.getContext().getContentResolver();
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
Long.parseLong(contact.contact_id));
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
Bitmap photo = BitmapFactory.decodeStream(input);


             当我们点击了某个控件,首先会去调用该控件所在布局的dispatchTouchEvent方法,然后在布局的dispatchTouchEvent方法中找到被点击的相应控件,再去调用该控件的dispatchTouchEvent方法。如果我们点击了MyLayout中的按钮,会先去调用MyLayout的dispatchTouchEvent方法,可是你会发现MyLayout中并没有这个方法。那就再到它的父类LinearLayout中找一找,发现也没有这个方法。那只好继续再找LinearLayout的父类ViewGroup,你终于在ViewGroup中看到了这个方法,按钮的dispatchTouchEvent方法就是在这里调用的。


自定义类加载器:

public class ClassLoaderTest {        public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {          //新建一个类加载器          MyClassLoader cl = new MyClassLoader("myClassLoader");          //加载类,得到Class对象          Class<?> clazz = cl.loadClass("classloader.Animal");          //得到类的实例          Animal animal=(Animal) clazz.newInstance();          animal.say();      }    }  
class Animal{      public void say(){          System.out.println("hello!");      }  }  
class MyClassLoader extends ClassLoader {      //类加载器的名称      private String name;      //类存放的路径      private String path = "E:\\testclassloader\\src";        MyClassLoader(String name) {          this.name = name;      }            MyClassLoader(ClassLoader parent, String name) {          super(parent);          this.name = name;      }      /**      * 重写findClass方法      */      @Override      public Class<?> findClass(String name) {          byte[] data = loadClassData(name);          return this.defineClass(name, data, 0, data.length);      }      public byte[] loadClassData(String name) {          try {              name = name.replace(".", "//");              FileInputStream is = new FileInputStream(new File(path + name + ".class"));              ByteArrayOutputStream baos = new ByteArrayOutputStream();              int b = 0;              while ((b = is.read()) != -1) {                  baos.write(b);              }              return baos.toByteArray();          } catch (Exception e) {              e.printStackTrace();          }          return null;      }  }  

linearLayout来控制类似于相对布局的xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:background="#ff0000" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="#00ff00"        android:gravity="bottom" >        <TextView            android:layout_width="match_parent"            android:layout_height="match_parent"            android:text="sdfsdfal" />    </LinearLayout></LinearLayout>


android监听系统来电:

//首先为监听器赋初始值private TelephonyManager mTelephonyManager; PhoneStateListener pListener = new PhoneStateListener(){              @Override              public void onCallStateChanged(int state, String number) {                  // TODO Auto-generated method stub                  switch (state) {                  case TelephonyManager.CALL_STATE_IDLE://无任何状态                                         break;                  case TelephonyManager.CALL_STATE_OFFHOOK://接听来电                       writeFile(state,number);                      break;                  case TelephonyManager.CALL_STATE_RINGING://来电                         incomingNumber=number;                      writeFile(state,number);                      break;                  default:                      break;                  }                                 super.onCallStateChanged(state, incomingNumber);              }                     };  //注意需要在oncreate()中这样写:mTelephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

关于android中音频焦点的获取:

private OnAudioFocusChangeListener mFocusChangeListener = null;private boolean mGetFocus = false;mFocusChangeListener = new OnAudioFocusChangeListener() {@Overridepublic void onAudioFocusChange(int focusChange) {if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {                                        //获得音频焦点时mGetFocus = true;} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS|| focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {                                        //失去音频焦点时mGetFocus = false;}}};        //获取音频焦点private boolean requestAudioFocus() {        if (!mGetFocus) {            int result = audioManager.requestAudioFocus(mFocusChangeListener,                    AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);            if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {                mGetFocus = false;            } else {                mGetFocus = true;            }        }        return mGetFocus;    }//失去音频焦点private void abandonAudioFocus() {        if (mGetFocus && (null != audioManager) && (null != mFocusChangeListener)) {            if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager                    .abandonAudioFocus(mFocusChangeListener)) {                mGetFocus = false;            } else {                mGetFocus = true;            }        }    }





0 0
原创粉丝点击