第一次發,應該是大家用得上的東西,今天有個需求是底部滑動控件,裏面放EditText和按鈕。然後那個EditText的獲取焦點並打開鍵盤的事件和外層控件的滑動事件衝突。我用了一個投機的方式解決了這個問題。
自定義的Gallery裏面onInterceptTouchEvent返回false。並且調用自己的onTouchEvent()。正常情況下Gallery的onInterceptTouchEvent返回false的話,內部控件就會消耗掉事件,不會調用onTouchEvent,返回true的話又只會調用自己的onTouchEvent()不會響應內部控件的方法。這樣重寫後,內外事件就都響應了。雖然解決了問題,但還是覺得這其中肯定會有風險。
歡迎大神指教。
事實上我用的時候確實也出現的問題,不知道跟這個有木有關係,內部的EditText的回退鍵和回車鍵失效。
</pre><pre name="code" class="java">package com.example.scrolldemo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Gallery;
@SuppressWarnings("deprecation")
public class MyGallery extends Gallery{
private boolean canScroll = true;
public MyGallery(Context context) {
super(context);
}
public MyGallery(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
onTouchEvent(ev);
return false;
}
}
EditText回退鍵和回車鍵失效的問題我也是通過重寫來彌補的。自己寫了EditText,彌補了上述問題,
雖然問題解決了,不過感覺還是坑坑的
歡迎大神指教
package com.example.scrolldemo;
import android.content.Context;
import android.text.Editable;
import android.text.Selection;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputConnectionWrapper;
import android.widget.EditText;
public class SecurityEditText extends EditText {
public SecurityEditText(Context context) {
super(context);
}
public SecurityEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SecurityEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new ZanyInputConnection(super.onCreateInputConnection(outAttrs),
true);
}
private class ZanyInputConnection extends InputConnectionWrapper {
public ZanyInputConnection(InputConnection target, boolean mutable) {
super(target, mutable);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if(event.getKeyCode() == KeyEvent.KEYCODE_DEL){
//執行刪除字符的操作
String s = getText().toString();
if(s.length()>=1){
String result = s.substring(0, s.length()-1);
setText(result);
Editable editable = getText();
Selection.setSelection(editable,editable.length());
}
}else if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
//執行回車操作
String s = getText().toString();
String result = s+"\n";
setText(result);
Editable editable = getText();
Selection.setSelection(editable,editable.length());
}
}
return super.sendKeyEvent(event);
}
@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {
if (beforeLength == 1 && afterLength == 0) {
return sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DEL))
&& sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_DEL));
}
return super.deleteSurroundingText(beforeLength, afterLength);
}
}
}
具體demo我就不放上來了,有需要可以聯繫我,QQ羣48375483