#android #keyboard
#Android #клавиатура
Вопрос:
Привет, у меня есть пользовательская клавиатура или цифровая клавиатура, у меня есть 2 проблемы, которые я не знаю, как это сделать ………… когда я нажимаю кнопку назад приложение закрывается Я хочу сначала сдвинуть клавиатуру вниз при нажатии кнопки назад и я хочу то же самоеесли я нажму на свой макет (белый) (посмотрите на картинку, и вы поймете)
public class BasicOnKeyboardActionListener implements OnKeyboardActionListener {
private Activity mTargetActivity;
public BasicOnKeyboardActionListener(Activity targetActivity) {
mTargetActivity = targetActivity;
}
@Override
public void swipeUp() {
// TODO Auto-generated method stub
}
@Override
public void swipeRight() {
// TODO Auto-generated method stub
}
@Override
public void swipeLeft() {
// TODO Auto-generated method stub
}
@Override
public void swipeDown() {
// TODO Auto-generated method stub
}
@Override
public void onText(CharSequence text) {
// TODO Auto-generated method stub
}
@Override
public void onRelease(int primaryCode) {
// TODO Auto-generated method stub
}
@Override
public void onPress(int primaryCode) {
// TODO Auto-generated method stub
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
long eventTime = System.currentTimeMillis();
KeyEvent event = new KeyEvent(eventTime, eventTime,
KeyEvent.ACTION_DOWN, primaryCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE);
mTargetActivity.dispatchKeyEvent(event);
}
CustomKeyboardView.class
public class CustomKeyboardView extends KeyboardView {
public CustomKeyboardView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showWithAnimation(Animation animation) {
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
setVisibility(View.VISIBLE);
}
});
setAnimation(animation);
}
KeyboardWidgetTutorialActivity.class
public class KeyboardWidgetTutorialActivity extends Activity {
private CustomKeyboardView mKeyboardView;
private View mTargetView;
private Keyboard mKeyboard;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mKeyboard = new Keyboard(this, R.xml.keyboard);
mTargetView = (EditText) findViewById(R.id.target);
mTargetView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
showKeyboardWithAnimation();
return true;
}
});
mKeyboardView = (CustomKeyboardView) findViewById(R.id.keyboard_view);
mKeyboardView.setKeyboard(mKeyboard);
mKeyboardView
.setOnKeyboardActionListener(new BasicOnKeyboardActionListener(
this));
}
private void showKeyboardWithAnimation() {
if (mKeyboardView.getVisibility() == View.GONE) {
Animation animation = AnimationUtils
.loadAnimation(KeyboardWidgetTutorialActivity.this,
R.anim.slide_in_bottom);
mKeyboardView.showWithAnimation(animation);
}
}
это основной xml
<RelativeLayout android:id="@ id/LinearLayout1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:layout_width="fill_parent"
android:id="@ id/container" android:layout_alignParentTop="true"
android:layout_height="fill_parent" android:layout_above="@ id/keyboard_view">
<EditText android:layout_width="fill_parent" android:id="@ id/target"
android:layout_height="wrap_content" />
</LinearLayout>
<it.anddev.tutorial.CustomKeyboardView
android:id="@ id/keyboard_view" android:visibility="gone"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_alignParentBottom="true"></it.anddev.tutorial.CustomKeyboardView>
Комментарии:
1. вы должны переопределить метод onBackPressed следующим образом и скрыть свою клавиатуру @Override public void onBackPressed() { super.onBackPressed(); }
2. как записать, чтобы сдвинуть вниз? а как насчет того, когда я нажимаю на макет
Ответ №1:
Переопределите
onBackPressed()
метод вKeyboardWidgetTutorialActivity
Activity и скройте клавиатуру, если она открыта.
@Override
public void onBackPressed() {
if (mKeyboardView.isShown()) {
mKeyboardView.setVisibility(View.GONE);
} else {
super.onBackPressed();
}
}
Пробел Предположим, что ваше пустое пространство — это этот макет или это может быть любой макет.
LinearLayout whiteSpace = (LinearLayout) findViewById(R.id.whitespace);
whiteSpace.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
if (mKeyboardView != null amp;amp; mKeyboardView.isShown()) {
mKeyboardView.setVisibility(View.GONE);
}
}
}
});
Комментарии:
1. спасибо, что сработало, но как насчет того же, если я нажму на макет? (пустой белый)
2. посмотрите на xml-контейнер, который представляет собой линейный макет в относительном макете, заполняющий весь макет
3. вы пробовали второй раздел? можете вставить свой код здесь.
4. кнопка «Назад» работала, но макет не работал
5. тот же код с вашими новыми кодами о макете, но он не сработал
Ответ №2:
Вы можете использовать slide_out
анимацию для скольжения вниз, чтобы скрыть клавиатуру
slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromXDelta="0%p"
android:toXDelta="-100%p">
</translate>
и поскольку вы уже используете, скройте свой вид после анимации