Как скрыть и отобразить представление перед веб-просмотром в зависимости от ввода пользователя - PullRequest
1 голос
/ 07 марта 2012

В настоящее время я работаю над проектом, в котором я использую веб-представление, упакованное в RelativeLayout, и разместил ImageButton в левом нижнем углу:

<RelativeLayout
        android:id="@+id/relativeLayout_maincontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        />

        <ImageButton
            android:id="@+id/imageButton_call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="2dp"
            android:src="@android:drawable/ic_menu_call" />

</RelativeLayout>

Это прекрасно работает.Следующим шагом, о котором я подумал, является то, что кнопка может иногда мешать моим пользователям, когда они не видят, что находится за кнопкой ... Поэтому я попытался скрыть кнопку через несколько секунд и когда пользователь прокручивает / касается/ или что-то еще (просто некоторый пользовательский ввод) я покажу его, и через несколько секунд кнопка снова исчезнет.Как и кнопки увеличения и уменьшения в веб-просмотре.Лучший способ - использовать те же функции, что и у этих кнопок масштабирования, но я не смог найти способ сделать это.Я создал функцию, основанную на знании Как показать представление в течение 3 секунд, а затем скрыть его? :

private void startCallButtonHidingThread() {
    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    callButton.setVisibility(ImageButton.GONE);
                }
            });
        }
    };
    thread.start();
}

Это прекрасно работает.Следующим шагом было отображение кнопки, когда пользовательский ввод происходит, поэтому я попробовал что-то вроде этого:

relativeLayout.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(callButton.getVisibility() == ImageButton.GONE) callButton.setVisibility(ImageButton.VISIBLE);
                startCallButtonHidingThread();
                            return false;
           }
 });

или что:

relativeLayout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if(callButton.getVisibility() == ImageButton.GONE) callButton.setVisibility(ImageButton.VISIBLE);
                startCallButtonHidingThread();

            }
        });

и то же самое, что я попробовал в веб-просмотре.Большую часть времени это работает только один раз, а затем вообще никакой реакции.

Так что, если у вас есть идея или лучшее решение, пожалуйста, дайте мне знать.Я очень ценю вашу помощь!

1 Ответ

0 голосов
/ 07 марта 2012

Я думаю, что это ограничение Android. Попробуйте использовать обработчик:

private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what){
            case 1:{
                if(callButton.getVisibility() == ImageButton.GONE) callButton.setVisibility(ImageButton.VISIBLE);
                startCallButtonHidingThread();
            }
        }
};

И ваш слушатель:

relativeLayout.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            handler.sendEmptyMessage(1);
            return false;
        }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...