最近总结的android疑惑(二)

            解决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() {

			@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;
	            }
	        }
	    }





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值