解决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 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>
//首先为监听器赋初始值 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);
private OnAudioFocusChangeListener mFocusChangeListener = null; private boolean mGetFocus = false; mFocusChangeListener = new OnAudioFocusChangeListener() { @Override public 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; } } }